タグ: xml xml schema xsd

XML Schemaを定義する

宣言部分です

導入部

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">

定義の基本

属性セットと要素のコンテンツを決定する複合型を定義します。配下の要素なりの出てくる順序や回数を指定したりするベースになります

オプション

メモ

オプション

simpleContent

メモ

単純型内容。データ型に制限を持たせる

オプション

complexContent

メモ

複合型内容。データ型に制限を持たせない。再利用時など

単純型は、エレメントの値は数字や文字列などの指定ができます。また、数字にしても10から1000の間までといった指定方法も可能です。

制限オフセット

メモ

制限オフセット

length

メモ

文字の長さを指定する

制限オフセット

minLength

maxLength

メモ

文字の長さの最小/最大値を指定する

制限オフセット

pattern

メモ

正規表現を用いた文字のパターンを指定する

制限オフセット

enumeration

メモ

値の候補を指定する

制限オフセット

minInclusive

メモ

値の範囲を指定する(〇〇以上)

制限オフセット

maxInclusive

メモ

値の範囲を指定する(〇〇以下)

制限オフセット

minExclusive

メモ

値の範囲を指定する(〇〇超過)

制限オフセット

maxExclusive

メモ

値の範囲を指定する(〇〇未満)

制限オフセット

totalDigits

メモ

最大桁数指定する

制限オフセット

fractionDigits

メモ

最大桁数指定する


それぞれの使用方法

length

文字列の長さを指定する方法です。6文字の文字列を指定する例です。

					[xsd]
					<element name="name" minOccurs="1" maxOccurs="unbounded">
					<simpleType>
					<restriction base="string">
					<length value="6"/>
					</restriction>
					</simpleType>
					</element>

					[xml]
					<root>
					<name>1</name><!--エラー-->
					<name>123456</name><!--OK-->
					</root>
				

minLength/maxLength

文字列の長さの上限または下限を指定する方法です。

上限のみを指定することで〇文字数まで、下限のみを指定することで〇文字数以上を指定することができ、また両方を指定することでパスワードのように〇文字数以上〇文字数以下という指定が可能です。

2文字以上4文字以下の文字列を指定する例です。

					[xsd]
					<element name="name" minOccurs="1" maxOccurs="unbounded">
					<simpleType>
					<restriction base="string">
					<minLength value="2"/>
					<maxLength value="4"/>
					</restriction>
					</simpleType>
					</element>

					[xml]
					<root>
					<name>a</name><!--NG-->
					<name>aa</name><!--OK-->
					<name>aaaa</name><!--OK-->
					<name>aaaaa</name><!--NG-->
					</root>
				

pattern

正規表現を用いて文字列のパターンを指定する方法です。郵便番号を指定する例です

					[xsd]
					<element name="name" minOccurs="1" maxOccurs="unbounded">
					<simpleType>
					<restriction base="string">
					<pattern value="\d{3}-\d{4}"/>
					</restriction>
					</simpleType>
					</element>

					[xml]
					<root>
					<name>1234567</name><!--NG-->
					<name>123-4567</name><!--OK-->
					</root>
				

enumeration

値の候補を指定する方法です。XMLのエディターでXSDに基づいて変換候補がタイプのものは出てくる奴はこれをもとに変換候補が出てくるでしょう。

候補として血液型を指定する例です。

					[xsd]
					<element name="blood-type" minOccurs="1" maxOccurs="unbounded">
					<simpleType>
					<restriction base="string">
					<enumeration value="A" />
					<enumeration value="AB" />
					<enumeration value="B" />
					<enumeration value="O" />
					</restriction>
					</simpleType>
					</element>
					[xml]
					<root>
					<blood-type>C</blood-type><!--NG-->
					<blood-type>AB</blood-type><!--OK-->
					</root>
				

minInclusive/maxInclusive/minExclusive/maxExclusive

値の範囲を指定する方法です。候補としてbook-priceで5以上10以下、pen-priceとして5超過10未満を指定する例です。

					[xsd]
					<element name="book-price" minOccurs="1" maxOccurs="unbounded">
					<simpleType>
					<restriction base="int">
					<maxInclusive value="10"/>
					<minInclusive value="5"/>
					</restriction>
					</simpleType>
					</element>
					<element name="pen-price" minOccurs="1" maxOccurs="unbounded">
					<simpleType>
					<restriction base="int">
					<maxExclusive value="10"/>
					<minExclusive value="5"/>
					</restriction>
					</simpleType>
					</element>
					[xml]
					<root>
					<book-price>4</book-price><!--NG-->
					<book-price>5</book-price><!--OK-->
					<book-price>10</book-price><!--OK-->
					<book-price>11</book-price><!--NG-->
					<pen-price>5</pen-price><!--NG-->
					<pen-price>6</pen-price><!--OK-->
					<pen-price>9</pen-price><!--OK-->
					<pen-price>10</pen-price><!--NG-->
					</root>
				

totalDigits

値の桁数を指定する方法です。maxLengthとの違いはmaxLengthは文字型の値に適用されるのに対して、totalDigitsは数字型に適用されます。

2桁の数字を指定する例です。

					[xsd]
					<element name="price" minOccurs="1" maxOccurs="unbounded">
					<simpleType>
					<restriction base="int">
					<totalDigits value="2"/>
					</restriction>
					</simpleType>
					</element>
					[xml]
					<root>
					<price>2</price><!--OK-->
					<price>22</price><!--OK-->
					<price>222</price><!--NG-->
					</root>
				

fractionDigits

値の桁数を指定する方法です。totalDigitsとの違いはtotalDigitsは総桁数を指定しているのに対し、fractionDigitsは小数点以下の桁数です。

少数以下1桁のmまでを指定する例です。

					[xsd]
					<element name="price" minOccurs="1" maxOccurs="unbounded">
					<simpleType>
					<restriction base="decimal">
					<fractionDigits value="1"/>
					</restriction>
					</simpleType>
					</element>
					[xml]
					<root>
					<price>2</price><!--OK-->
					<price>2.2</price><!--OK-->
					<price>2.22</price><!--NG-->
					</root>