1 / 27

応用 Java (Java/XML)

第10回  2007 年 6 月 29 日. 応用 Java (Java/XML). 前回までやったこと. 「 XML パーサ」 -- Java で XML を処理 javax.xml.stream パッケージのパーサ SAX(Simple API for XML) のパーサ DOM(Document Object Model) のパーサ パーサの応用 : テーブルの利用 , フィルタ的な処理 DOM ツリーの検索、視覚化 パーサの上位のサービス XPath -- XML 文書内の検索

oma
Download Presentation

応用 Java (Java/XML)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第10回 2007年6月29日 応用Java (Java/XML)

  2. 前回までやったこと • 「XMLパーサ」-- Java でXMLを処理 javax.xml.stream パッケージのパーサ SAX(Simple API for XML) のパーサ DOM(Document Object Model)のパーサ パーサの応用 : テーブルの利用,フィルタ的な処理 DOMツリーの検索、視覚化 • パーサの上位のサービス XPath -- XML文書内の検索 XSLT – XML文書の変換

  3. 後半の内容の予定 • XPath (6/15) • XSLT (6/22) • 名前空間(Namespace) (6/22) • XML文書の妥当性の検証(6/29) XML Schema • JAXB (7/6, 7/13) • SOAP, Webサービ(7/20) • 試験(7/27)

  4. 本日(6/29)の講義内容 • XML文書の設計と「妥当性」 • W3C XML Schema とは? • 妥当性の検証のAPI javax.xml.validation

  5. 復習:整形(Well Formed)文書 • 要素は開始タグと終了タグ <abc> This is a pen. </abc> <img src=“java.png” /> • 要素は階層的な親子関係 <abc></abc><efg></efg> ○ <abc><efg></efg></abc> ○ <abc><efg></abc></efg> × • 全体は単独の要素で囲まれる (Document Type )

  6. 整形ではない例(1) <World> <Japan> <China> <USA> </World>

  7. 整形ではない例(2) <World> <Japan><Wakkanai/></Japan> <China><USA> </China></USA> </World>

  8. 整形ではない例(3) <Asia> <Japan></Japan> <China></China> </Asia> <USA> </USA>

  9. 整形だが正しいか? <World> <Asia> <Japan></Japan> <England></England> </Asia> <USA> <China></China></USA> </World>

  10. 整形な文書は形式的な「正しさ」 • XML文書の目的に沿う「正しさ」は別 • 「妥当性(Valid)」の概念 • 「妥当」であることをどう定めるか? 要素の名前 出現順序、出現回数 親子関係のルール 属性の名前、許される値

  11. XML文書の設計とスキーマ言語 • スキーマ言語 – XML文書のルールを定める DTD (document type definition) XML Schema W3C XML Schema RELAX NG Schematron

  12. DTD について • DTD( Document Type Definition) • XMLのルールを記述する専用言語 • XML誕生当時の「スキーマ言語」 • 表現力の制約、名前空間の制約 • XMLとは全く異なる文法 <!DOCTYPE name [<!ELEMENT name (first, last)> <!ELEMENT first (#PCDATA)> <!ELEMENT last (#PCDATA)>] >

  13. W3C XML Schema の特徴 • 優れた表現力 • 厳密な定義 • 豊富なデータ型 • 名前空間の利用 • それ自身がXMLである! • 事実上の標準規格

  14. XML Schema の例 <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>

  15. Schema の解説(1) <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”, 型は文字列

  16. Schemaの解説(2) <xsd:element name="name“ type="nameType"/> • 要素を定義,名前は”name” ,型は”nameType” <xsd:complexType name="nameType"> : : </xsd:complexType> • 複雑な型の内容を定義、名前は “nameType”

  17. Schemaの解説(3) <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

  18. XML Schema の例(2) <xsd:complexType name="peopleType"> <xsd:sequence> <xsd:element name="name" type="nameType" minOccurs="1" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType>

  19. XML Schema の例(3) <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>

  20. 出現回数のルールのまとめ • 何回でも自由(省略も可) minOccurs=“0“ maxOccurs="unbounded“ • 何回でも自由(省略は不可=最低1回) minOccurs=“1“ maxOccurs="unbounded“ • 1回か省略(最大1回) minOccurs=“0“ maxOccurs=“1“ • 1回のみ(省略は不可)-- デフォルト値 minOccurs=“1“ maxOccurs=“1“ *min, max とも省略されると値1と解釈

  21. 少し複雑な schema の表現 <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>

  22. javax.xml.validation • Schema 一般的なルール記述 ただし実装は W3C XML Scheman にのみ対応 • Validator 妥当性の検証を実行 validate()

  23. 妥当性検証の処理の流れ 1) Factory クラスのインスタンスの取得 SchemaFactory sf = SchemaFactory .newInstance( スキーマの種類の指定); 2) Schemaのインスタンスの取得 Schema schema = sf.newSchema(スキーマ定義入力元); 3) Validator のインスタンスの取得 4) validate( 検証対象のXML ); の呼び出し

  24. javax.xml.validationの例(1) SchemaFactory sf = SchemaFactory.newInstance( "http://www.w3.org/2001/XMLSchema" ); Schema schema = sf.newSchema( new StreamSource( args[0] ) );

  25. javax.xml.validationの例(2) try { Validator validator = schema.newValidator(); validator.validate( new StreamSource( args[1] ) ); } catch( Exception e ) { } *妥当でない場合には例外が発生

  26. 妥当でない場合の処理 • 例外を直接処理 (catch ブロック内で) • エラーハンドラに処理を渡す MyErrorHandler ehandler = new MyErrorHandler(); validator.setErrorHandler( ehandler ); *妥当でない – error() メソッドを呼ぶ (整形でない場合は fatalError() )

  27. 後半の内容の予定 • XPath (6/15) • XSLT (6/22) • 名前空間(Namespace) (6/22) • XML文書の妥当性の検証(6/29) XML Schema • JAXB (7/6, 7/13) • SOAP, Webサービ(7/20) • 試験(7/27)

More Related