Xml-schemas
XML-スキーマ
XMLスキーマは、一般的に* XMLスキーマ定義(XSD)*として知られています。 XMLデータの構造と内容を記述および検証するために使用されます。 XMLスキーマは、要素、属性、およびデータ型を定義します。 スキーマ要素は名前空間をサポートします。 これは、データベース内のデータを記述するデータベーススキーマに似ています。
構文
次のようにXML文書でスキーマを宣言する必要があります-
例
次の例は、スキーマを使用する方法を示しています-
<?xml version = "1.0" encoding = "UTF-8"?>
<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema">
<xs:element name = "contact">
<xs:complexType>
<xs:sequence>
<xs:element name = "name" type = "xs:string"/>
<xs:element name = "company" type = "xs:string"/>
<xs:element name = "phone" type = "xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
XMLスキーマの背後にある基本的な考え方は、XML文書が取り得る正当な形式を記述することです。
要素
link:/xml/xml_elements [XML-要素]の章で見たように、要素はXMLドキュメントの構成要素です。 要素は、次のようにXSD内で定義することができます-
<xs:element name = "x" type = "y"/>
定義タイプ
あなたは次の方法でXMLスキーマ要素を定義することができます-
シンプルタイプ
単純型要素は、テキストのコンテキストでのみ使用されます。 事前定義された単純型には、xs:integer、xs:boolean、xs:string、xs:dateがあります。 たとえば-
<xs:element name = "phone_number" type = "xs:int"/>
複合型
複合型は、他の要素定義のコンテナです。 これにより、要素に含めることができる子要素を指定し、XMLドキュメント内に何らかの構造を提供できます。 たとえば-
<xs:element name = "Address">
<xs:complexType>
<xs:sequence>
<xs:element name = "name" type = "xs:string"/>
<xs:element name = "company" type = "xs:string"/>
<xs:element name = "phone" type = "xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
上記の例では、_Address_要素は子要素で構成されています。 これは、他の <xs:element> 定義のコンテナであり、XMLドキュメント内の要素の単純な階層を構築できます。
グローバルタイプ
グローバルタイプを使用すると、他のすべての参照で使用できる単一のタイプをドキュメントに定義できます。 たとえば、会社の異なる住所の_person_と_company_を一般化するとします。 そのような場合、次のように一般的なタイプを定義できます-
<xs:element name = "AddressType">
<xs:complexType>
<xs:sequence>
<xs:element name = "name" type = "xs:string"/>
<xs:element name = "company" type = "xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
次のように、この例でこのタイプを使用してみましょう-
<xs:element name = "Address1">
<xs:complexType>
<xs:sequence>
<xs:element name = "address" type = "AddressType"/>
<xs:element name = "phone1" type = "xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name = "Address2">
<xs:complexType>
<xs:sequence>
<xs:element name = "address" type = "AddressType"/>
<xs:element name = "phone2" type = "xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
名前と会社を2回(_Address1_に1回、_Address2_に1回)定義する代わりに、1つの定義があります。 これにより、メンテナンスがより簡単になります。つまり、住所に「郵便番号」要素を追加する場合は、1か所で追加する必要があります。
属性
XSDの属性は、要素内の追加情報を提供します。 以下に示すように、属性には_name_および_type_プロパティがあります-
<xs:attribute name = "x" type = "y"/>