XML Schema (2) ソフトウェア特論 第4回 / 2004-05-21 きょうの目標 XML Schema の組み込みのデータ型につ いて学ぶ。 XML Schema の複合型について学ぶ。 単純型と複合型 単純型と複合型 単純型 内容がテキストのみ あらかじめ、いくつかのデータ型が定義されている。 データの派生に使う ときは、<xsd:simpleType>~ </xsd:simpleType> 複合型 内容に要素や属性を含む <xsd:complexType>~ </xsd:complexType> XML Schema 組み込みの データ型 さまざまなデータ型 (1) string 文字列 boolean 論理型 true か false (または 1 か 0) さまざまなデータ型 (2) integer nonNegativeInteger 整数 0以上の整数 nonPositiveInteger 0以下の整数 さまざまなデータ型 (3) float 単精度浮動小数 double 倍精度浮動小数 さまざまなデータ型 (4) date 日付 例) 2004-05-21 time 時刻 例) 10:40:00-09:00 XML Schema の例 (名前空間などの属性を外した) <?xml version="1.0"?> <xsd:schema> <xsd:element name=“number” type="xsd:integer"/> </xsd:schema> XMLインスタンスの例 (名前空間などの属性を外した) <?xml version="1.0"?> <st:number> 123 </st:number> だめな例 <?xml version="1.0"?> <st:number> abcdefghij </st:number> 整数ではないから。 複合型 (1) 要素の中に要素を指定する (子要素) student の子要素として familyName と givenName がある。 <st:student> <st:familyName>安藤</st:familyName> <st:givenName>友晴</st:givenName> </st:student> XML インスタンスの例 <?xml version="1.0"?> <st:student xmlns:st=http://www.wakhok.ac.jp/~tomoharu/students xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi:schemaLocation= "http://www.wakhok.ac.jp/~tomoharu/students sample03.xsd"> <st:familyName>安藤</st:familyName> <st:givenName>友晴</st:givenName> </st:student> XML Schema の例 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" ……> <xsd:element name="student"> <xsd:complexType> <xsd:sequence> <xsd:element name="familyName" type="xsd:string"/> <xsd:element name="givenName" type="xsd:string" /> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> 複合型の指定 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" ……> <xsd:element name="student"> <xsd:complexType> <xsd:sequence> <xsd:element name="familyName" type="xsd:string"/> <xsd:element name="givenName" type="xsd:string" /> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> <xsd:sequence> 項目が順番に出現する <xsd:sequence> <xsd:element name="familyName“ type="xsd:string"/> <xsd:element name="givenName" type="xsd:string" /> </xsd:sequence> familyName 要素が出てから givenName 要素が出現 順番の変更や要素の省略は許されない XML Schema に適合する例 <st:student> <st:familyName>安藤</st:familyName> <st:givenName>友晴</st:givenName> </st:student> XML Schema に 適合しない例 (1) <st:student> <st:givenName>友晴</st:givenName> <st:familyName>安藤</st:familyName> </st:student> givenName と familyName が逆 XML Schema に 適合しない例 (2) <st:student> <st:familyName>安藤</st:familyName> </st:student> givenName がない グローバル要素とローカル要素 グローバル要素 schema 要素の直下で定義されている要素 ローカル要素 complexType 要素の中で定義されている要 素 このXML Schema のうち、グローバ ル要素とローカル要素は? <xsd:schema> <xsd:element name="student"> <xsd:complexType> <xsd:sequence> <xsd:element name="familyName" type="xsd:string"/> <xsd:element name="givenName" type="xsd:string" /> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> Student 要素がグローバル要素 familyName 要素と givenName 要素がローカル要素 グローバル要素・ローカル要素 と名前空間 (1) XML Schema のデフォルトの設定では、ローカ ル要素に名前空間が適用されない。 以下の XML インスタンスは間違いとなる。 <st:student> <st:familyName>安藤</st:familyName> <st:givenName>友晴</st:givenName> </st:student> グローバル要素・ローカル要素 と名前空間 (2) 次のように、子要素には名前空間を指定 できなくなる。 <st:student> <familyName>安藤</familyName> <givenName>友晴</givenName> </st:student> グローバル要素・ローカル要素 と名前空間 (3) ElementFormDefault 属性の値を “qualified” にすること で、familyName 要素や givenName 要素に名前空間を 付けられる。 <xsd:schema xmlns:xsd=http://www.w3.org/2001/XMLSchema elementFormDefault=“qualified” ……> <xsd:element name="student"> …… </xsd:element> </xsd:schema> グローバル要素・ローカル要素 と名前空間 (4) 以下の XML インスタンスは正しい。 <st:student> <st:familyName>安藤</st:familyName> <st:givenName>友晴</st:givenName> </st:student> ref 属性による参照 (1) <?xml version="1.0"?> <xsd:schema …> <xsd:element name="student"> <xsd:complexType> <xsd:sequence> <xsd:element ref="st:familyName" /> <xsd:element ref="st:givenName" /> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="familyName" type="xsd:string" /> <xsd:element name="givenName" type="xsd:string" /> </xsd:schema> ref 属性による参照 (2) ref 属性を使うことによって、XML Schema の階層が深くなっても、わかりやすい Schema を記述できる。 ref 属性による参照 (3) ref 属性を使うことによって、complexType 要素の中で定義されている要素も、グロー バル要素にすることができる。 その結果、ElementFormDefault 属性を付 け加えなくても、名前空間が利用できる。 参考文献・URL Extensible Markup Language (XML) 1.0 (Third Edition) http://www.w3.org/TR/REC-xml/ XML 1.0 の仕様書です。 W3C XML Schema http://www.w3.org/XML/Schema XML Schema の仕様書など。
© Copyright 2024 ExpyDoc