任意の要素を持てる要素を定義する - XML スキーマ - XML プログラミング

PROGRAM


任意の要素を持てる要素を定義する

XML スキーマで、任意の要素を子要素として持てる要素を定義するには、次のような感じにします。

<xsd:element name="掲載項目">

<xsd:complexType>

<xsd:sequence>

<xsd:any namespace="##other" processContents="strict" maxOccurs="unbounded" />

</xsd:sequence>

</xsd:complexType>

</xsd:element>

ここで、接頭辞 xsd は、名前空間 "http://www.w3.org/2001/XMLSchema" です。

 

任意の子要素を定義している部分は <xsd:any> タグのところです。

そのタグ内の "namespace" 属性によって "##other"、つまりこの XML スキーマの <xsd:schema> タグの "targetNamespace" 属性で指定されている名前空間以外 (other) のタグであればなんでも、子要素として登場していいことになります。

同じ名前空間内のタグでなければいけないときは "##targetNamespace" を、任意の名前空間を指定する場合は "http://xxx.xx.jp/ns/schema2" などの名前空間名を指定します。複数の名前空間を指定する場合は、それらを空白を挟んで指定します。"##targetNamespace http://xxx.xx.jp/ns/schema2" といった指定も可能です。

名前空間に依らずにどんなタグでもいい場合には "##any" を指定します。

 

"processContents" 属性というのは、その任意の要素を検証するかどうかを指定します。

"strict" が指定されている場合は、その要素を検証します。"lax" を指定した場合はスキーマが判明していれば検証し、"skip" の場合は検証しません。この属性を省略した場合には "strict" が指定されたことになるようです。

 

なお、上記の例では "maxOccurs" 属性として "unbounded" を指定しているので、任意の数の子要素を持たせることが可能です。"minOccurs" 属性は指定していないので、最低 1 つは子要素を持たせる必要があります。


[ もどる ]