INTRO TO XSD

XML Schema
 スキーマ言語
 どの要素がどの属性を持てるか 等のXMLの木構造のルール定義
 をする言語
 
 XML文書を解析しデータを読み取るプログラムがXMLパーサ
 必要なデータがXML文書に含まれているか確認するのもXMLパーサ
 
 DTD(Document Type Definition)もXMLのスキーマ言語
 古くてシンプル
 機能不足となったDTDに代わって登場したのがXML Schema
 
 要素の内容を指定の文字列に限定
 要素数の限定
 等細部まで指定可能

■単純Schema
<'greeting>Hello World!!<'/greeting>
 -ルート要素は greeting
 -greeting要素は属性を持たない
 -greeting要素の内容は文字列
 -greeting要素は子要素を持たない
 ↓
<'?xml version="1.0"?>-①
<'xsd:schema xmlns:xsd=""http ://www.w3.org/2001/XMLSchema">-②
 <'xsd:element name="greeting" type="xsd:string"/>-③
<'/xsd:schema>-④
 ①:XML宣言
 ②:ルート要素[xsd:schema]
   xsd:XML Schemaの名前空間(名前空間先頭辞)
   xsd:schema: XML Schemaのschema要素
   xmlns: 名前空間宣言の開始
   http...: 識別子(名前空間URI)
   xmlns:xsd="..": 名前空間宣言
   要素名の先頭にxsd:とあったら http...XMLSchemaで定義された要素であることを示す。
 ③:要素要素[element]
   xsd: 名前空間接頭辞
   name: 要素名を指定する属性
   greeting: 要素名
   type: 要素の構造を指定する属性
   xsd:string: 子供要素・属性なしで内容はXMLSchemaで定義しているstring型(文字列)
 ④:schema要素の終了タグ

■入れ子Schema
<'customer>
<'name>ほげ子<'/name>
<'address>東京都<'/address>
<'/customer>
 -customer要素:
   ・ルート要素
   ・属性無し
   ・子要素はnameとaddress
   ・子要素出現順序はnameの後にaddress
 -name/address要素:
   ・子要素なし
   ・属性なし
   ・内容は文字列

1 : <'?xml version="1.0"?>
2 : <'xsd:schema xmlns:xsd=""http ://www.w3.org/2001/XMLSchema">
3 : <'xsd:element name="customer">
4 : <'xsd:complexType>
5 : <'xsd:sequence>
6 : <'xsd:element name="name" type="xsd:string"/><'!--子要素①-->
7 : <'xsd:element name="address" type="xsd:string" /><'!--子要素②-->
8 : <'/xsd:sequence>
9 : <'/xsd:complexType>
10: <'/xsd:element>
11: <'/xsd:schema>

■単純型&複雑型
 要素が子要素・属性を持つかを判定するデータ型。
 -複雑型:
  子要素または属性を持つ要素のデータ型
 -単純型:
  子要素および属性を持たない要素のデータ型
  あるいは属性値のデータ型

 要素は複雑型か単純型かによって、宣言方法が異なる。

□複雑型
 L3: name属性の値には 要素名「customer」を指定。
 L4: 複雑型の要素を宣言する際のデータ型[xsd:complexType]
 L5: 子要素の出現順序の指定[xsd:sequence]
   name、addressの順番で宣言することを指定。
 L6: 子要素の宣言[xsd:element]
  単純型なので 普通にtype属性指定して終わり。
  複雑型の場合は 下層に[xsd:complexType]で続ける。
 
■ref属性で要素参照
 [xsd:element ref="要素名"]で参照可能。
1 : <'?xml version="1.0"?>
2 : <'xsd:schema xmlns:xsd=""http ://www.w3.org/2001/XMLSchema">
3 :
4 : <'xsd:element name="customer">
5 : <'xsd:complexType>
6 : <'xsd:sequence>
7 : <'xsd:element name="name" type="xsd:string"/>
8 : <'!-- address 要素に子要素を追加する -->
9 : <'xsd:element name="address">
10: <'xsd:complexType>
11: <'xsd:sequence>
12: <'xsd:element name="prefecture" type="xsd:string"/>
13: <'xsd:element name="city" type="xsd:string" />
14: <'xsd:element name="street" type="xsd:string" />
15: <'/xsd:sequence>
16: <'/xsd:complexType>
17: <'/xsd:element>
18: <'!-- ここまで -->
19: <'/xsd:sequence>
20: <'/xsd:complexType>
21: <'/xsd:element>
22:
23:<'/xsd:schema>

上と下は同じこと。

1 : <'?xml version="1.0"?>
2 : <'xsd:schema xmlns:xsd=""http ://www.w3.org/2001/XMLSchema">
3 :
4 : <'xsd:element name="customer">
5 : <'xsd:complexType>
6 : <'xsd:sequence>
7 : <'xsd:element name="name" type="xsd:string"/>
8 : <'xsd:element ref="address"/>
9 : <'/xsd:sequence>
10: <'/xsd:complexType>
11: <'/xsd:element>
12:
13: <'xsd:element name="address">
14: <'xsd:complexType>
15: <'xsd:sequence>
16: <'xsd:element name="prefecture" type="xsd:string"/>
17: <'xsd:element name="city" type="xsd:string" />
18: <'xsd:element name="street" type="xsd:string" />
19: <'/xsd:sequence>
20: <'/xsd:complexType>
21: <'/xsd:element>
22:
23: <'/xsd:schema>

■要素属性の宣言
 [xsd:attribute]で要素属性を指定。

<'customer hoge="hogege" piyo="piyoyo">
<'name>ほげ子<'/name>
<'address>東京都<'/address>
<'/customer>
 -customer要素
   ・ルート要素
   ・hoge属性、piyo属性あり
   ・子要素はnameとaddress
   ・子要素出現順序はnameの後にaddress
 ↓
1: <'?xml version="1.0"?>
2: <'xsd:schema xmlns:xsd=""http ://www.w3.org/2001/XMLSchema">
3:
4: <'xsd:element name="customer">
5: <'xsd:complexType>
6: <'xsd:sequence>
7: <'xsd:element name="name" type="xsd:string"/>
8: <'xsd:element name="address" type="xsd:string" />
9: <'/xsd:sequence>
10: <'!-- 属性を追加する -->
11: <'xsd:attribute name="hoge" type="xsd:string"/>
12: <'xsd:attribute name="piyo" type="xsd:string"/>
13: <'/xsd:complexType>
14: <'/xsd:element>
15:
16: <'/xsd:schema>

■maxOccurs属性
 繰り返し出現する要素の最多出現数を指定する属性
<'order>
<'orderItem>こども①<'/orderItem>
<'orderItem>こども②<'/orderItem>
<'/order>
 -order要素:
   ・複雑型
   ・ルート要素
   ・複数出現する子要素あり(10個以下)
 -orderItem要素:
   ・単純型
   ・内容は文字列
 ↓
1 :<'?xml version="1.0"?>
2 :<'xsd:schema xmlns:xsd="http ://www.w3.org/2001/XMLSchema">
3 :
4 : <'xsd:element name="order">
5 : <'xsd:complexType>
6 : <'xsd:sequence>
7 : <'xsd:element name="orderItem" type="xsd:string" maxOccurs="10"/>
8 : <'/xsd:sequence>
9 : <'/xsd:complexType>
10: <'/xsd:element>
11:
12:<'/xsd:schema>

 ※[maxOccurs="unbounded"]=1個以上の上限無し

■minOccurs属性
 繰り返し出現する要素の最少出現数を指定する属性
 0以上を指定可能

■choice要素
 いずれかを選択させる属性

1 :<'?xml version="1.0"?>
2 :<'xsd:schema xmlns:xsd="http ://www.w3.org/2001/XMLSchema">
3 :
4 : <'xsd:element name="order">
5 : <'xsd:complexType>
6 : <'xsd:sequence>
7 : <'xsd:element ref="orderItem" maxOccurs="10"/>
8 : <'/xsd:sequence>
9 : <'/xsd:complexType>
10: <'/xsd:element>
11:
12: <'xsd:element name="orderItem">
13: <'xsd:complexType>
14: <'xsd:sequence>
15: <'xsd:choice>
16: <'xsd:element name="name" type="xsd:string"/>
17: <'xsd:element name="id" type="xsd:string"/>
18: <'/xsd:choice>
19: <'xsd:element name="quantity" type="xsd:string" minOccurs="0"/>
20: <'/xsd:sequence>
21: <'/xsd:complexType>
22: <'/xsd:element>
23:
24:<'/xsd:schema>

ref:
http ://www.atmarkit.co.jp/fxml/rensai2/schema01/schema01.html

tag : XML Schema xsd

2008-08-26 00:42 : __lang__xml : コメント : 0 : トラックバック : 0 :
コメントの投稿
非公開コメント

« next  ホーム  prev »

search

ad



counter


tag cloud

category cloud