2010年3月22日月曜日

[XML] やりなおし XML Schema (4)

やりなおし XML Schema (3) の続き。

要素と属性の宣言について。
データ型を定義したら、そのデータ型を使って要素や属性を宣言できる(データ型の定義と、要素や属性の宣言はテキスト上では前後してもOK)。

要素の宣言

要素の宣言は、element 要素を使う。宣言の基本形はname属性に要素名、type属性にデータ型を指定した以下の形。

<xsd:element name="shipTo" type="Address"/>


複数の複合型の定義の中で同じ要素を使い回したい場合は、グローバル要素(schema要素の直下に宣言される要素)を ref属性で指定することができる。たとえば comment という要素を schema要素直下で宣言しておいて

<xsd:schema xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<xsd:element name="comment" type="xsd:string"/>
......

comment要素を出現させたい箇所(ex.複合型の定義内)で、ref属性で参照する。

<xsd:element ref="comment"/>

ref属性に指定するのは、その要素のname属性。

カーディナリティ
要素の出現回数を指定するのに、minOccurs属性およびmaxOccurs属性を使う。

Ex 1) 要素が出現しないか、1回だけ出現するケース

<xsd:element ref="comment" minOccurs="0" maxOccurs="1"/>

Ex 2) 要素が必ず1回だけ出現するケース

<xsd:element ref="comment" minOccurs="1" maxOccurs="1"/>

Ex 3) 要素が1回以上(何回でもよい)出現するケース. 「何回出現してもよい」を表現するために、maxOccursで"unbounded"という値が用意されている。

<xsd:element ref="comment" minOccurs="1" maxOccurs="unbounded"/>


minOccurs属性を指定しなかった場合は 1 (デフォルト値)、maxOccurs属性を指定しなかった場合はminOccursと同じ値とみなされる。そのため、両方省略した場合は、その要素は必ず1回だけ出現しなければならない(上記 Ex 2 と同じ)。


属性の宣言

属性の宣言には、attribute 要素を使う。基本形は要素の場合と同じで、name属性に属性名、type属性にデータ型を指定する。ただし、type属性には単純型しか指定できない。


<xsd:attribute name="orderDate" type="xsd:date" />

要素と同じように、グローバル属性(schema要素の直下に宣言される属性)を ref属性で指定することができる。

カーディナリティ
属性が必須(XML文書で出現しなければならない)か、固定値か、デフォルト値をもつかどうかに、use属性およびvalue属性を使う。

Ex 1) 属性が必須であるケース(use="required")

<xsd:attribute name="country" type="xsd:NMTOKEN" use="required"/>

Ex 2) 属性が必須ではないが、固定値であるケース(use="fixed",value="value"). 出現する場合はvalue属性で指定された値でなければならず、出現しない場合はvalue属性で指定された値とみなされる。

<xsd:attribute name="country" type="xsd:NMTOKEN" use="fixed" value="US"/>

Ex 3) 属性は必須ではなく、指定されない場合はデフォルト値とみなされるケース(use="default", value="value")

<xsd:attribute name="country" type="xsd:NMTOKEN" use="default" value="US"/>

Ex 4) 属性は必須ではない。任意の値をもつことができる。(use="optional")

<xsd:attribute name="country" type="xsd:NMTOKEN" use="optional"/>



要素、属性のカーディナリティの指定例がこちら

0 件のコメント:

コメントを投稿