第 第 10 2007 第 6 第 29 第
Jan 30, 2016
第10回 2007 年 6 月 29 日
「 XML パーサ」 -- Java で XML を処理 javax.xml.stream パッケージのパーサ SAX(Simple API for XML) のパーサ DOM(Document Object Model) のパーサ パーサの応用 : テーブルの利用 , フィルタ的な処理 DOM ツリーの検索、視覚化パーサの上位のサービス XPath -- XML 文書内の検索 XSLT – XML 文書の変換
XPath (6/15)XSLT (6/22)名前空間 (Namespace) (6/22)XML 文書の妥当性の検証 (6/29) XML SchemaJAXB (7/6, 7/13)SOAP, Web サービ (7/20)試験 (7/27)
XML 文書の設計と「妥当性」 W3C XML Schema とは?妥当性の検証の API javax.xml.validation
要素は開始タグと終了タグ <abc> This is a pen. </abc> <img src=“java.png” />要素は階層的な親子関係 <abc></abc><efg></efg> ○ <abc><efg></efg></abc> ○ <abc><efg></abc></efg> ×全体は単独の要素で囲まれる (Document Type )
<World> <Japan> <China> <USA></World>
<World> <Japan><Wakkanai/></Japan> <China><USA> </China></USA></World>
<Asia> <Japan></Japan> <China></China></Asia><USA></USA>
<World> <Asia> <Japan></Japan> <England></England> </Asia> <USA>
<China></China></USA></World>
XML 文書の目的に沿う「正しさ」は別「妥当性 (Valid) 」の概念「妥当」であることをどう定めるか? 要素の名前 出現順序、出現回数 親子関係のルール 属性の名前、許される値
スキーマ言語 – XML 文書のルールを定める DTD (document type definition) XML Schema W3C XML Schema RELAX NG Schematron
DTD( Document Type Definition)XML のルールを記述する専用言語XML 誕生当時の「スキーマ言語」表現力の制約、名前空間の制約XML とは全く異なる文法 <!DOCTYPE name [ <!ELEMENT name (first, last)> <!ELEMENT first (#PCDATA)> <!ELEMENT last (#PCDATA)> ] >
優れた表現力厳密な定義豊富なデータ型名前空間の利用それ自身が XML である!事実上の標準規格
<xsd:schema xmlns:xsd ="http://www.w3.org/2001/XMLSchema"> <xsd:element name="name"
type="nameType"/> <xsd:complexType name="nameType"> <xsd:sequence> <xsd:element name="first"
type="xsd:string"/> <xsd:element name="last"
type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:schema>
<xsd:schema xmlns:xsd ="http://www.w3.org/2001/XMLSchema"> W3C XML Schema であることを示す URI 以下、プレフィックス xsd: で表現 : : <xsd:element name="first"
type="xsd:string"/> <xsd:element name=“last"
type="xsd:string"/>要素を定義 , 名前は” first”, 型は文字列要素を定義 , 名前は “ last”, 型は文字列
<xsd:element name="name“ type="nameType"/>
要素を定義 , 名前は” name” , 型は” nameType”
<xsd:complexType name="nameType"> : : </xsd:complexType>複雑な型の内容を定義、名前は “ nameType”
<xsd:complexType name=“nameType”> <xsd:sequence> <xsd:element name="first"
type="xsd:string"/> <xsd:element name="last"
type="xsd:string"/> </xsd:sequence> </xsd:complexType>複雑な型 “ nameType” の内容 以下のものが順に出現 (sequence) 要素 first 要素 last
<xsd:complexType name="peopleType">
<xsd:sequence> <xsd:element name="name" type="nameType"
minOccurs="1" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType>
<xsd:complexType name="nameType">
<xsd:sequence> <xsd:element name="first" type="xsd:string"/> <xsd:element name="middle" type="xsd:string"
minOccurs="0"/> </xsd:sequence></xsd:complexType>
何回でも自由(省略も可) minOccurs=“0“ maxOccurs="unbounded“何回でも自由(省略は不可=最低1回) minOccurs=“1“ maxOccurs="unbounded“1回か省略(最大1回) minOccurs=“0“ maxOccurs=“1“1回のみ(省略は不可) -- デフォルト値 minOccurs=“1“ maxOccurs=“1“
* min, max とも省略されると値1と解釈
<xsd:sequence> <xsd:element name="title" type="xsd:string"
minOccurs="0"/> <xsd:choice minOccurs="0“ maxOccurs="unbounded"> <xsd:element name="text" type="xsd:string" /> <xsd:element name="image" type="imageType" /> </xsd:choice></xsd:sequence>
Schema 一般的なルール記述 ただし実装は W3C XML
Scheman にのみ対応Validator 妥当性の検証を実行 validate()
1) Factory クラスのインスタンスの取得 SchemaFactory sf = SchemaFactory .newInstance( スキーマの種類の指定 );2) Schemaのインスタンスの取得 Schema schema = sf.newSchema( スキーマ定義入力元 );3) Validator のインスタンスの取得4) validate( 検証対象のXML ); の呼び出し
SchemaFactory sf = SchemaFactory.newInstance(
"http://www.w3.org/2001/XMLSchema" );
Schema schema = sf.newSchema( new
StreamSource( args[0] ) );
try { Validator validator = schema.newValidator(); validator.validate( new StreamSource( args[1] )
); } catch( Exception e ) { }
*妥当でない場合には例外が発生
例外を直接処理 (catch ブロック内で )エラーハンドラに処理を渡す MyErrorHandler ehandler = new MyErrorHandler(); validator.setErrorHandler( ehandler
);
*妥当でない – error() メソッドを呼ぶ ( 整形でない場合は fatalError() )
XPath (6/15)XSLT (6/22)名前空間 (Namespace) (6/22)XML 文書の妥当性の検証 (6/29) XML SchemaJAXB (7/6, 7/13)SOAP, Web サービ (7/20)試験 (7/27)