Download presentation
Presentation is loading. Please wait.
1
第11回 2007年7月6日 応用Java (Java/XML)
2
前回までやったこと 「XMLパーサ」-- Java でXMLを処理 javax.xml.stream パッケージのパーサ
SAX(Simple API for XML) のパーサ DOM(Document Object Model)のパーサ パーサの応用 : 検索,フィルタ的な処理 、視覚化 パーサの上位のサービス 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
本日(7/6)の講義内容 JAXB JavaとXMLの変換のフレームワーク) XJC 新しいJDKのツール
5
復習:XMLの「正しさ」 整形 XMLとして正しい形式か? 妥当性 データの内容として目的どおりか? 妥当性の検証には「設計図」が必要
スキーマ言語
6
整形ではない例 <World> <Japan><Wakkanai/>
<China><USA> </China></USA> </World> *org.xml.sax.ErrorHandler fatalError() として処理
7
整形だが妥当でない? <Asia> <Japan></Japan>
<World> <Asia> <Japan></Japan> <England></England> </Asia> <USA> <China></China></USA> </World> *org.xml.sax.ErrorHandler error()メソッド
8
XML文書の設計とスキーマ言語 スキーマ言語 – XML文書のルールを定める DTD (document type definition)
XML Schema W3C XML Schema RELAX NG Schematron
9
W3C XML Schema の特徴 優れた表現力 厳密な定義 豊富なデータ型 名前空間の利用 それ自身がXMLである! 事実上の標準規格
10
XML Schema の例 <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>
11
Schema の解説(1) <xsd:schema xmlns:xsd
=" W3C XML Schema であることを示すURI 以下、プレフィックス xsd: で表現 : <xsd:element name="first" type="xsd:string"/> <xsd:element name=“last" type="xsd:string"/> 要素を定義,名前は”first”, 型は文字列 要素を定義,名前は “last”, 型は文字列
12
Schemaの解説(2) <xsd:element name="name“ type="nameType"/>
<xsd:complexType name="nameType"> : </xsd:complexType> 複雑な型の内容を定義、名前は “nameType”
13
Schemaの解説(3) <xsd:element name="first" type="xsd:string"/>
<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
14
XML Schema の例(2) <xsd:complexType name="peopleType">
<xsd:sequence> <xsd:element name="name" type="nameType" minOccurs="1" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType>
15
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>
16
出現回数のルールのまとめ 何回でも自由(省略も可) minOccurs=“0“ maxOccurs="unbounded“
何回でも自由(省略は不可=最低1回) minOccurs=“1“ maxOccurs="unbounded“ 1回か省略(最大1回) minOccurs=“0“ maxOccurs=“1“ 1回のみ(省略は不可)-- デフォルト値 minOccurs=“1“ maxOccurs=“1“ *min, max とも省略されると値1と解釈
17
javax.xml.validation の例(1)
SchemaFactory sf = SchemaFactory.newInstance( " ); Schema schema = sf.newSchema( new StreamSource( args[0] ) );
18
javax.xml.validation の例(2)
try { Validator validator = schema.newValidator(); validator.validate( new StreamSource( args[1] ) ); } catch( Exception e ) { } *妥当でない場合には例外が発生
19
妥当でない場合の処理 例外を直接処理 (catch ブロック内で) エラーハンドラに処理を渡す
MyErrorHandler ehandler = new MyErrorHandler(); validator.setErrorHandler( ehandler ); *妥当でない – error() メソッドを呼ぶ (整形でない場合は fatalError() )
20
JAXB JAXB(Java architecture for XML Binding) Java と XML とのマッピングを提供
新しい Webサービスを支える基礎技術 アノテーションをフルに活用
21
Java と XML(1) Java のクラスとインスタンス public class Name { String first;
String last; } Name name = new Name(); name.first=“Tatsuo”; name.last=“Ueda”;
22
Java と XML(2) XMLのドキュメント <nama> <first>Tatsuo</fist>
<last>Ueda</last> </name> 要素<name> -- インスタンス name 要素<first>,<last> -- フィールドに対応
23
Java と XML(3) インスタンスは個々の XML文書に対応 クラスの定義は? XML文書の定義はスキーマ言語
DTD(Document Type Definition) XML Schema W3C XML Schema RELAX NG Schematron
24
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>
25
Java との比較(1) String first; public String getFirst() { returen first; }
public void setFirst( String s ) { first = s; } <xsd:element name="first" type="xsd:string"/> 基本は 「フィールド(プロパティ)要素」
26
Java との比較(2) public class name { … } <xsd:element
name="name“ type="nameType"/> <xsd:complexType name="nameType"> : String first; String last; <xsd:sequence> <xsd:element name="first" type="xsd:string"/> <xsd:element name="last" type="xsd:string"/> </xsd:sequence>
27
XML Schema の例(2) <xsd:complexType name="peopleType">
<xsd:sequence> <xsd:element name="name" type="nameType" minOccurs="1" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType>
28
対応のまとめ Java言語 < -- > W3C XML Schema
Java のインスタンス < -- > XML文書 Java のフィールド < -- > XMLの要素 (より正確にはプロパティ、属性のケースも)
29
新しい ツール xjc (1) xjc ( XML to Java compiler ) W3C XML Schema 定義ファイルを
xjc name.xsd
30
元のスキーマファイル <xsd:schema
xmlns:xsd=" <xsd:element name="name" type="Name"/> <xsd:complexType name="Name"> <xsd:sequence> <xsd:element name="first" type="xsd:string"/> <xsd:element name="last" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:schema>
31
自動生成された Name.java(1) package generated;
import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlType;
32
自動生成された Name.java(2) @XmlAccessorType(XmlAccessType.FIELD)
@XmlType( name = "Name", propOrder ={ "first", "last" } ) public class Name { :
33
自動生成された Name.java(3) 「プロパティ」とフィールド @XmlElement(required = true)
protected String first; protected String last;
34
自動生成された Name.java(4) getter と setter も生成 public String getFirst() {
return first; } public void setFirst( String value) { this.first = value;
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.