第11回 2007年7月6日 応用Java (Java/XML).

Slides:



Advertisements
Similar presentations
アルゴリズムとプログラミン グ (Algorithms and Programming) 第6回:クラスとインスタンス クラスの宣言 アクセス修飾子 インスタンスの生成 (new キーワード) this キーワード フィールドとメソッドの実際の定義と使い 方 クラスの宣言 アクセス修飾子 インスタンスの生成.
Advertisements

Web サービス II ( 第 13 回 )‏ 2008 年 1 月 9 日 植田龍男. 本日の目的 Web サービスの歴史と将来の展望 (1) WSDL 2.0 の登場 ‏ Jersey プロジェクト Ver 0.5 による開発.
応用 Java(Java/XML) 第 10 回 2006 年 7 月 14 日 植田龍男. 後半の内容の予定 XPath (6/9) 、 XSLT (6/16) 名前空間 (Namespace) (6/16) XML 文書の妥当性の検証 (6/23) DTD, W3C XML Schema SOAP.
WebサービスII (第12回)‏ 2007年12月19日 植田龍男.
Apache Camel Data Format Component Apache Camel
2006年9月27日 植田龍男 Webサービス II (第1回) 年9月27日 植田龍男.
Webサービスに関する基本用語 Masatoshi Ohishi / NAOJ & Sokendai
第9回 2007年6月22日 応用Java (Java/XML).
2006年11月15日 植田龍男 Webサービス II (第8回) 年11月15日 植田龍男.
2006年11月22日 植田龍男 Webサービス II (第9回) 年11月22日 植田龍男.
背景 我々の研究室で開発しているJavaプログラム解析フレ ームワークでは,解析情報はメモリ上に保持される 問題点
Apache Camel Data Format Component Apache Camel
WebサービスII (第10回) 2007年11月28日 植田龍男.
JSFによるWebアプリケーション開発 第11回
アルゴリズムとデータ構造1 2007年6月12日
アルゴリズムとプログラミング (Algorithms and Programming)
WSDL と JAX-RPC 年10月13日 Webサービス II (第3回) WSDL と JAX-RPC 年10月13日.
第5回 2007年5月25日 応用Java (Java/XML).
第4回 2007年5月11日 応用Java (Java/XML).
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
XJ: XML Enhancements to Java の紹介
WebサービスII (第8回) 2007年11月14日 植田龍男.
JavaBeans とJSP データベース論 第5回.
JSFによるWebアプリケーション開発 第6回
WSDL と JAX-RPC 年10月20日 Webサービス II (第4回) WSDL と JAX-RPC 年10月20日.
2005年10月6日 植田龍男 Webサービス II (第2回) 年10月6日 植田龍男.
第20章 Flyweight ~同じものを共有して無駄をなくす~
入出力データ型に透過な Webサービス動的実行システム 松江工業高等専門学校 情報工学科 越田高志 情報処理学会第68回全国大会
第12回 2007年7月13日 応用Java (Java/XML).
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
第10回 2007年6月29日 応用Java (Java/XML).
Webサービス II(第3回) 2007年10月10日.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
第8回 2007年6月15日 応用Java (Java/XML).
第3回 2007年4月27日 応用Java (Java/XML).
WebサービスII (第7回) 2007年11月7日 植田龍男.
第7回 2007年6月8日 応用Java (Java/XML).
第6回 2007年6月1日 応用Java (Java/XML).
第1回 2007年4月13日 応用Java (Java/XML).
Nakano School of Business 経営情報ビジネス科 【 Java概論(Test5)】
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
10-1 SAXの概要 10-2 Saxプログラミングの基礎 10-3 saxのプログラム例
7.4 intanceof 演算子 7.5~7.9パッケージ 2003/11/28 紺野憲一
第2回 2007年4月20日 応用Java (Java/XML).
独習XML ~第3章 文書と構造~ 3.3 スキーマ 3.3 XML Schema
2006年11月8日 植田龍男 Webサービス II (第7回) 年11月8日 植田龍男.
第1章 実世界のモデル化と形式化 3.地物インスタンスの表現
Javaによる Webアプリケーション入門 第11回
第13回 2007年7月20日 応用Java (Java/XML).
ソフトウェア制作論 平成30年11月21日.
パッケージ,アクセス修飾子 2008年4月27日 海谷 治彦.
XML Schema (1) ソフトウェア特論 第3回 /
~let's take fun when you can do it~
応用Java(Java/XML) 第7回 2006年6月16日 植田龍男.
XMLゼミ 3.5 DTD M2 正木 裕一.
3-1.文書と構造 3-2.整形式文書と検証済み文書 兒玉 光太郎
オブジェクト・プログラミング 第8回.
拡張可能なアスペクト指向モデリングにおける織り合わせの検証
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
C#プログラミング実習 第3回.
Javaによる Webアプリケーション入門 第4回
Jakarta Struts (1) ソフトウェア特論 第10回.
JAVA入門⑥ クラスとインスタンス.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
2006年10月18日 植田龍男 Webサービス II (第4回) 年10月18日 植田龍男.
応用Java(Java/XML) 第8回 2005年6月9日 植田龍男.
応用Java(Java/XML) 第8回 2005年6月23日 植田龍男.
Presentation transcript:

第11回 2007年7月6日 応用Java (Java/XML)

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

後半の内容の予定 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)

本日(7/6)の講義内容 JAXB JavaとXMLの変換のフレームワーク) XJC 新しいJDKのツール

復習:XMLの「正しさ」 整形 XMLとして正しい形式か? 妥当性 データの内容として目的どおりか? 妥当性の検証には「設計図」が必要 スキーマ言語

整形ではない例 <World> <Japan><Wakkanai/> <China><USA> </China></USA> </World> *org.xml.sax.ErrorHandler fatalError() として処理

整形だが妥当でない? <Asia> <Japan></Japan> <World> <Asia> <Japan></Japan> <England></England> </Asia> <USA> <China></China></USA> </World> *org.xml.sax.ErrorHandler error()メソッド

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

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

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>

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”, 型は文字列

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

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

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

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>

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

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

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

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

JAXB JAXB(Java architecture for XML Binding) Java と XML とのマッピングを提供 新しい Webサービスを支える基礎技術 アノテーションをフルに活用

Java と XML(1) Java のクラスとインスタンス public class Name { String first; String last; } --------------------------------------------------- Name name = new Name(); name.first=“Tatsuo”; name.last=“Ueda”;

Java と XML(2) XMLのドキュメント <nama> <first>Tatsuo</fist> <last>Ueda</last> </name> 要素<name> -- インスタンス name 要素<first>,<last> -- フィールドに対応

Java と XML(3) インスタンスは個々の XML文書に対応 クラスの定義は? XML文書の定義はスキーマ言語 DTD(Document Type Definition) XML Schema W3C XML Schema RELAX NG Schematron

XML Schema の例(1) <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>

Java との比較(1) String first; public String getFirst() { returen first; } public void setFirst( String s ) { first = s; } <xsd:element name="first" type="xsd:string"/> 基本は 「フィールド(プロパティ)要素」

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>

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

対応のまとめ Java言語 < -- > W3C XML Schema Java のインスタンス < -- > XML文書 Java のフィールド < -- > XMLの要素 (より正確にはプロパティ、属性のケースも)

新しい ツール xjc (1) xjc ( XML to Java compiler ) W3C XML Schema 定義ファイルを xjc name.xsd

元のスキーマファイル <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <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>

自動生成された 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;

自動生成された Name.java(2) @XmlAccessorType(XmlAccessType.FIELD) @XmlType( name = "Name", propOrder ={ "first", "last" } ) public class Name { :

自動生成された Name.java(3) 「プロパティ」とフィールド @XmlElement(required = true) protected String first; protected String last;

自動生成された Name.java(4) getter と setter も生成 public String getFirst() { return first; } public void setFirst( String value) { this.first = value;