独習XML ~第3章 文書と構造~ 3.3 スキーマ 3.3 XML Schema ~第3章 文書と構造~ 3.3 スキーマ 3.3 XML Schema 谷津 哲平
スキーマとは さまざまな文書やデータの内容構造を定義したもの(広義) 整形式文書(内容の保証なし) 検証済み文書(構造が厳格) スキーマ文書 XML文書の構造を定義するための方法 DTD (Document Type Definition、文書型定義) XML Schema (XMLスキーマ) RELAX (Regular Language Description for XML) Microsoft XML Schema (XML Data) ※スキーマとXML Schemaは同じではない 有効性を検証した文書(valid XML document)はタグの順序や属性値などが スキーマ文書に定義されているとおりだと保証される
XML Schema 概要 XMLの文書型定義にはDTDが使われてきたが不十分になり、 使い方 musinst.xml XML文書 バリデータ(Validator) or XMLパーサ XML文書を 検証する musinst.xsd XML Schema
Schema 要素 XML Shema を定義するときは schema要素を記述し,その中に スキーマの定義を記述する <xsd:schema xmlns:xsd=“http://www.w3.org/2001/XMLSchema”> (スキーマ定義) </xml:schema>
コメント,要素宣言 XML Schemaのコメント <!-- schema.xsd --> ※XML 文書と同じ XML Schemaの要素宣言(element declaration) <xsd:element name=“楽器” type=“xsd:string”> type属性の値 string(文字列型)であることを示す name属性の値 要素名が「楽器」であることを示している
単純型(simpleType) XML Schemaではデータ型に単純型と複合型がある 単純型 単純型 説明 値の例 string 文字列 Mojiretu positiveInteger 正の整数 1, 126789 integer 整数 -126789, -1, 0, 1 uriReference URL http://www.ibaraki.ac.jp/ decimal 10進数 -10, 0, 123.4, 1000.0 time 時刻 13:20:00.000
単純型のユーザ定義 独自の単純な型を単純型(simpleType)として定義できる ユーザ定義の例 <xsd:simpleType name=“MyType” base=“xsd:string”> <xsd:pattern value=“[A-Z]{2}”/> </xml:simpleType> 「MyType」という単純型を文字列方をベースに A-Zの範囲の大文字の英文字2文字で構成されるpatternと定義 (文字列の形式を指定する要素)
複合型 (complexType) XML文書の構造や複数の要素を含む要素はcomplexTypeを使う 複合型 要素宣言 属性宣言 <?xml version=“1.0” encoding=“UTF-16” ?> <!– schema.xsd --> <xsd:schema xmlns:xsd=“http://www.w3.org/1999/XMLSchema”> <xsd:complexType name=“連絡先”> <xsd:element name=“氏名” type=“xsd:string”> <xsd:attribute name=“CODE” type=“xsd:long”/> <xsd:attribute name=“TEL” type=“xsd:string”/> <xsd:attribute name=“FAX” type=“xsd:string”/> </xsd:element> </xsd:complexType> </xmd:schema> 要素宣言 属性宣言
要素参照,出現回数 要素参照の指定 <xsd:element ref=“Title” minOccurs=“0” /> 出現回数の指定 <xsd:element name=“氏名” type=“xsd:string” minOccurs=“1” /> <xsd:element name=“TEL” type=“xsd:string” /> <xsd:element name=“別名” type=“xsd:string” minOccurs=“0” maxOccurs=“unbounded” /> 要素「氏名」タグが少なくとも1個,要素「TEL」も少なくとも1個 要素「別名」は出現しなくても,いくつ出現してもよい 要素がいくつでもよいとき maxOccurs に“unbounded”を指定する
属性宣言(attribute declaration) 属性の指定 <xsd:attribute name=“CODE” type=“xsd:NMTOKEN”/> 連絡先の<氏名>タグの属性“CODE”を“xsd:NMTOKEN”型の 属性として指定する例
ファセット(facet)[1] 制限を表すもの XML Shema では既存のデータ型の範囲やサイズを制限して 新しいデータ型を定義することができる xsd:length 値の長さを限定する.文字列の場合は文字単位, バイナリーデータの場合はオクテット(8ビット)単位, リストの場合はリスト項目単位で指定. <xsd:length value=”5”> 文字列の場合 5文字という制限になる
ファセット(facet)[2] xsd:minLength 値の長さの最小値を限定する. xsd:maxLength 値の長さの最大値を限定する. 要素名「title」 <xsd:element name="title"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:maxLength value=“32" /> <xsd:minLength value=“6" /> </xsd:restriction> </xsd:simpleType> </xsd:element> 単純型である 「xsd:string」を元に制限をつける ファセット 最大値32,最小値6 という制限
ファセット(facet)[3] xsd:maxInclusive 値の範囲の最大値を限定する.指定した値は含まれる. <xsd:maxInclusive value=”10”> 10以下 xsd:maxExclusive 値の範囲の最大値を限定する.指定した値は含まれない. <xsd:maxExclusive value=”10”> 10未満
XML Schema の例 (再) 「楽器リスト」は「楽器」要素で構成 「楽器」の個数は無限 「記譜音域」は省略できる 文字型要素 正の整数型要素
課題 ●XML Schema で,要素の内容を1以上10未満に 制約する定義を記述する