Download presentation
Presentation is loading. Please wait.
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();
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.