Presentation is loading. Please wait.

Presentation is loading. Please wait.

応用Java(Java/XML) 第8回 2005年6月23日 植田龍男.

Similar presentations


Presentation on theme: "応用Java(Java/XML) 第8回 2005年6月23日 植田龍男."— Presentation transcript:

1 応用Java(Java/XML) 第8回 2005年6月23日 植田龍男

2 後半の内容の予定 XPath (6/9) XSLT (6/16) 名前空間(Namespace) (6/16)
XML文書の妥当性の検証(6/23) DTD, W3C XML Schema SOAP, RMI(7/7, 7/14, 7/21) 試験(7/28)

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

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

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

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

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

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

9 DTD と妥当性の検証 DTD( Document Type Definition) XMLのルールを記述する専用言語 SGMLからの流れ
当初のXMLはすべてDTDで書かれた XMLとは全く異なる文法 表現力の制約、名前空間の制約

10 DTDの例(1) <!DOCTYPE name [<!ELEMENT name (first, last)>
<!ELEMENT first (#PCDATA)> <!ELEMENT last (#PCDATA)>] > <name> <first>Tatsuo</first> <last>Ueda</last> </name>

11 妥当ではない文書の例(1) <!DOCTYPE name [<!ELEMENT name (first, last)>
<!ELEMENT first (#PCDATA)> <!ELEMENT last (#PCDATA)>] > <name> <last>Ueda</last> <first>Tatsuo</first> </name>

12 妥当ではない文書の例(2) <!DOCTYPE name [<!ELEMENT name (first, last)>
<!ELEMENT first (#PCDATA)> <!ELEMENT last (#PCDATA)>] > <name> Tatsuo <last>Ueda</last> </name>

13 もう少し複雑なDTD <!ELEMENT people (name+)>
<!ELEMENT name (first, middle?, last)> <!ELEMENT first (#PCDATA)> <!ELEMENT middle (#PCDATA)> <!ELEMENT last (#PCDATA)>

14 回数を指定する記号 + --- 1回以上の任意の回数 ? --- 1回または0回(省略可能) * --- 0回以上の任意の回数
+ --- 1回以上の任意の回数 ? --- 1回または0回(省略可能) * --- 0回以上の任意の回数 記号による指定なしは1回(省略不可)

15 さらに複雑なDTDの例 <!ELEMENT document (title?, (text|image)*)>
<!ELEMENT title (#PCDATA)> <!ELEMENT text (#PCDATA)> <!ELEMENT image EMPTY> <!ATTLIST image s NMTOKEN #REQUIRED w NMTOKEN #IMPLIED h NMTOKEN #IMPLIED>

16 | と * の組み合わせ | 「または」の意味 ( text | image ) いずれか一方 ( text | image )*
任意の順序で任意の回数出現

17 属性の定義 <!ATTLIST …. > 属性のリスト 対象の要素の指定 属性名 データ型 必須か省略化か、デフォルト値

18 妥当な文書の例 <!DOCTYPE document SYSTEM "sample.dtd"> <document>
<title>Java and XML</title> <text> Let's begin, now! </text> <image s="java.png" w="128" h="64"/> <image s="cg.png" w="400" h="300"/> <text>Java 3D</text> </document>

19 名前空間の処理(復習) パーサへの通知 SAXParserFactory spf
  = SAXParserFactory.newInstance(); spf.setNamespaceAware( true ); SAXParser parser = spf.newSAXParser();

20 DTDによる検証を実行する = SAXParserFactory.newInstance();
SAXParserFactory spf = SAXParserFactory.newInstance(); spf.setNamespaceAware( true ); spf.setValidating( true ); SAXParser parser = spf.newSAXParser(); XMLReader reader = parser.getXMLReader();

21 DOMのパーサの場合 = DocumentBuilderFactory .newInstance();
dbf.setNamespaceAware( true ); dbf.setValidating( true ); DocumentBuilder db = dbf.newDocumentBuilder();

22 ignorableWhitespace()
ContentHandlerに定義 DTDでは本来入れない場所に文字! 人間の目のための区切りと解釈 (空白、タブ、改行)

23 無視されるべき空白文字 <!DOCTYPE name [<!ELEMENT name (first, last)>
<!ELEMENT first (#PCDATA)> <!ELEMENT last (#PCDATA)>] > <name> <first>Tatsuo</first> <last>Ueda</last> </name>

24 XML文書の設計とスキーマ言語 スキーマ言語 DTD (document type definition) XML Schema
W3C XML Schema RELAX NG Schematron

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

26 XML Schema の例(1) <xsd:schema xmlns:xsd
=" <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>

27 DTD との比較(1) <!ELEMENT first (#PCDATA)>
<xsd:element name="first" type="xsd:string"/>

28 DTD との比較(2) <!ELEMENT name … <xsd:element
name="name“ type="nameType"/> <xsd:complexType name="nameType"> : (first, last) <xsd:sequence> <xsd:element name="first" type="xsd:string"/> <xsd:element name="last" type="xsd:string"/> </xsd:sequence>

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

30 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>

31 DTDとの比較(3) * minOccurs=“0“ maxOccurs="unbounded“ +
minOccurs=“0“ maxOccurs=“1“ 記号なし minOccurs=“1“ maxOccurs=“1“

32 XML Schemaによる検証(SAX) SAXParserFactory spf
= SAXParserFactory.newInstance(); spf.setNamespaceAware( true ); spf.setValidating( true ); SAXParser parser = spf.newSAXParser(); parser.setProperty( " schemaLanguage", " );

33 XML Schemaによる検証(DOM) DocumentBuilderFactory dbf
= DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware( true ); dbf.setValidating( true ); dbf.setAttribute( " schemaLanguage", " ); DocumentBuilder db = dbf.newDocumentBuilder();

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

35 javax.xml.validation の例
SchemaFactory sf = SchemaFactory.newInstance( " ); Schema schema = sf.newSchema( new StreamSource( args[0] ) );

36 javax.xml.validation の例(2)
try { Validator validator = schema.newValidator(); validator.validate( new StreamSource( args[1] ) ); } catch( Exception e ) { }

37 まとめ (用語とその意味) XML文書の処理とパーサ SAX (Simple API for XML)
DOM (Document Object Model) XPath XSLT (eXtensible Stylesheet Language / Transformation ) 名前空間 (Namespace) DTD と W3C XML Schema

38 プログラミングの特徴 共通したデザインパターン (クラス、メソッドの命名規則など) SAXParserFactory spf =
SAXParserFactory.newInstance(); SAXParser parser = spf.newSAXParser();


Download ppt "応用Java(Java/XML) 第8回 2005年6月23日 植田龍男."

Similar presentations


Ads by Google