10.XML Schema を書く
本章では、XML Schemaのまとめとして、具体的にXML Schemaを書いてみたいと思います。
- 10.1 受注伝票
- 10.2 XML Schemaを書く
- 10.3 まとめ
- (参考) Restriction
10.1 受注伝票
本章では、受注伝票の情報をXMLで保存し、そのスキーマをXML Schemaで記述することを考えます.
[備考] ・受注番号は、受注伝票が発生するごとに一意につけられる。 ・同じ商品は一つの受注伝票に記入しない。同じ商品を扱う場合は、別伝票に記入する。 ・一枚の受注伝票に記入できる商品は5つまで、6つ以上受注した場合は別伝票とする。 ・商品番号は2つの数字で表される。 |
まず、必要なことは、データの木構造を決定することです。XMLでは、データを木構造で表現します。受注伝票のデータを「木構造」のデータとして捉えなおす必要があります。
受注伝票には、受注日、受注番号が一意に決まります。また、受注伝票には、顧客の情報、商品の情報が含まれます。顧客の情報には顧客名、顧客住所が含まれます。商品情報には、商品番号、商品名、数量、単価、合計金額が含まれます。受注商品は複数あります。各商品の情報には、商品番号、商品名、数量、単価の情報が含まれます。
データを木構造に記述したら、各ノードを要素にするか、属性にするか、決定します。属性は子要素をもつことが出来ないので、「ツリー図」の「葉」にあたる部分しか、属性にすることは出来ません。また、属性はひとつの要素に複数指定することは出来ません。それを踏まえて、属性とするものを決定します。受注伝票では、「受注日」と「受注番号」を属性とします。
次に各Nodeの型を決定していきます。まず、各Nodeの型がどのTypeなのか、判断します.
Complex Type |
子供要素、または属性をもつノードの型 |
---|---|
Simple Type | 内容にテキストしか持たないノードの型 |
「受注日」、「受注番号」の属性は、当然Simple Typeです。また、「顧客名」「顧客住所」「商品番号」「商品名」「数量」「単価」などの要素も、子供要素、属性をもたないので、Simple Typeになります。「ツリー図」で表したときの「葉」の部分が、Simple Typeになります。他の「受注伝票」「顧客」「受注商品」「商品」の各要素はすべて、Complex Typeになります。
Simple TypeのNodeに対しては、どのような型にするか検討します.既存のデータ型と一致する場合はそれを使用します。(既存のデータ型へのリンク)
受注日 | date |
---|---|
受注番号 | int |
顧客名 | string |
顧客住所 | string |
商品番号 | 2桁の数字 |
商品名 | string |
数量 | int |
単価 | int |
商品番号以外は既存のデータ型を使用して、記述します。商品番号のデータ型は新たに定義します。
Complex Typeに関しては、さらに、Content Typeによって、宣言の方法が異なります。内容(開始タグと終了タグの間)がどうなっているか確認します。Content Typeは、3種類あります。
Simple Content | 内容に文字列しか含まない型、子要素をもたず、属性のみを持つ型 |
---|---|
Complex Content | 子要素をもつが、内容に文字列を含まない型 |
Mixed Content | 内容に子供要素、文字列、両方持つ型 |
そこで、もう一度、木構造を眺めてみますと、このスキーマのComplex Typeの要素は、すべてComplex Contentのもののみであることがわかります。Complex ContentのComplex Typeの場合、子供要素の出現回数と、出現順番を決定します。Complex Typeのnodeは、受注伝票、顧客、受注商品、商品の4つの要素です。これらはすべて、COmplex ContentのComplex Typeです。それぞれの要素について、子供要素の出現回数、出現の順番を決定します。
要素名 | 子供要素 | 出現順番 | 出現回数 |
---|---|---|---|
受注伝票 | 顧客、受注商品 | 顧客、受注商品の順 | 各1回ずつ |
顧客 |
顧客名、顧客住所 | 顧客名、顧客住所の順 | 各1回ずつ |
受注商品 |
商品 | NA | 最低1回、最高5回 |
商品 | 商品番号、商品名、数量、単価 | 商品番号、商品名、数量、単価の順 | 各1回ずつ |
これで、受注伝票のデータ設計が完了しました。後は、この内容をXML Schemaで記述すれば完成です。