第12回 2007年7月13日 応用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日 植田龍男.
創造工学設計I 電子情報工学科4年(前期) 8回目 (04/6/2015) 担当 古山彰一 ac
背景 我々の研究室で開発しているJavaプログラム解析フレ ームワークでは,解析情報はメモリ上に保持される 問題点
Apache Camel Data Format Component Apache Camel
WebサービスII (第10回) 2007年11月28日 植田龍男.
JSFによるWebアプリケーション開発 第11回
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日.
WebサービスII (第8回) 2007年11月14日 植田龍男.
JavaBeans とJSP データベース論 第5回.
JSFによるWebアプリケーション開発 第6回
エンタープライズアプリケーション II 第7回 / 2006年7月9日
WSDL と JAX-RPC 年10月20日 Webサービス II (第4回) WSDL と JAX-RPC 年10月20日.
2005年10月6日 植田龍男 Webサービス II (第2回) 年10月6日 植田龍男.
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
アルゴリズムとデータ構造 2011年6月20日
~手続き指向からオブジェクト指向へ[Ⅱ]~
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
第10回 2007年6月29日 応用Java (Java/XML).
Webサービス II(第3回) 2007年10月10日.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
第11回 2007年7月6日 応用Java (Java/XML).
第8回 2007年6月15日 応用Java (Java/XML).
暗黙的に型付けされる構造体の Java言語への導入
第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).
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
10-1 SAXの概要 10-2 Saxプログラミングの基礎 10-3 saxのプログラム例
Jakarta Struts (2) ソフトウェア特論 第11回.
第2回 2007年4月20日 応用Java (Java/XML).
独習XML ~第3章 文書と構造~ 3.3 スキーマ 3.3 XML Schema
2006年11月8日 植田龍男 Webサービス II (第7回) 年11月8日 植田龍男.
ソースコード縮退による ソースコード理解 神谷年洋 科学技術振興事業団 さきがけ研究21 オブジェクト指向シンポジウム2003.
Javaによる Webアプリケーション入門 第11回
第13回 2007年7月20日 応用Java (Java/XML).
ソフトウェア制作論 平成30年11月21日.
パッケージ,アクセス修飾子 2008年4月27日 海谷 治彦.
XML Schema (1) ソフトウェア特論 第3回 /
「XML技術者育成教材」 -XMLエンジニア育成のための実践テキスト-
~let's take fun when you can do it~
応用Java(Java/XML) 第7回 2006年6月16日 植田龍男.
拡張可能なアスペクト指向モデリングにおける織り合わせの検証
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
C#プログラミング実習 第3回.
Javaによる Webアプリケーション入門 第4回
WebアプリケーションとTomcat ― これまでの復習とこれからの予習 ―
Action Method の実装 J2EE II 第9回 2004年12月2日.
Jakarta Struts (1) ソフトウェア特論 第10回.
JAVA入門⑥ クラスとインスタンス.
アルゴリズムとデータ構造 2012年6月21日
2006年10月18日 植田龍男 Webサービス II (第4回) 年10月18日 植田龍男.
JSFによるWebアプリケーション開発 第7回
応用Java(Java/XML) 第8回 2005年6月9日 植田龍男.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
応用Java(Java/XML) 第8回 2005年6月23日 植田龍男.
Presentation transcript:

第12回 2007年7月13日 応用Java (Java/XML)

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

後半の内容の予定 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/13)の講義内容 JAXB JavaとXMLの変換のフレームワーク) の続き javax.xml.bind パッケージ アプリケーション内で変換の実現 schemagen ツール Javaのクラスから W3C XML Schemaを

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

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>

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 sample11.xsd

前回の実習: sample11.xsd <xsd:element name="people" type="peopleType"/> <xsd:complexType name="peopleType"> <xsd:sequence> <xsd:element name="name" type="nameType" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> => PeopleType.java に :

前回の実習: sample11.xsd(2) <xsd:complexType name="nameType"> <xsd:sequence> <xsd:element name="first" type="xsd:string"/> <xsd:element name="middle" type="xsd:string" minOccurs="0"/> <xsd:element name="last" </xsd:sequence> </xsd:complexType> => NameType.java に

パッケージとディレクトリ パッケージ( package) クラスのグループ分け、管理をしやすく xjc デフォルトでは自動生成したクラスをgenerated というパッケージに --+-- sampel11.xsd +-- generated --+-- PeopleType.java +-- NameType.java +-- ObjectFactory.java

NameType.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;

NameType.java(2) @XmlAccessorType(XmlAccessType.FIELD) @XmlType( name = "Name", propOrder ={ "first", "last" } ) public class NameType { :

NameType.java(3) 「プロパティ」とフィールド(3個) @XmlElement(required = true) protected String first; protected String middle; protected String last;

NameType.java(4) getter と setter も生成(3X2で計6個) public String getFirst() { return first; } public void setFirst( String value) { this.first = value;

PeopleType.java 複数のNameTypeを内部に持つ(setterなし) @XmlElement(required = true) protected List<NameType> name; : public List<NameType> getName() { if (name == null) name = new ArrayList<NameType>(); return this.name; }

setter のメソッドがない理由 内部のコレクションにデータ格納が可能 (コレクション自身を入れ替える必要なし) クラス People List Name

XML文書から Javaインスタンス <name> <first>Tatsuo</first> <last>Ueda</last> </name>

XML文書から Javaインスタンス import javax.xml.bind.*; import generated.*; : JAXBContext jc = JAXBContext.newInstance( "generated" );

XML文書から Javaインスタンス Unmarshaller u = jc.createUnmarshaller(); JAXBElement element = (JAXBElement)u.unmarshal( new FileInputStream( "name.xml" ) ); Name name = (Name)element.getValue();

XML文書から Javaインスタンス String first = name.getFirst(); String last = name.getLast(); System.out.println( first + " " + last );

JavaインスタンスからXML文書 Name name = new Name(); String first = "Fujio"; String last = "Maruyama"; name.setFirst( first ); name.setLast( last );

JavaインスタンスからXML文書 JAXBElement element =new JAXBElement(      new QName( "name" ), Name.class, name ); Marshaller m = jc.createMarshaller(); m.setProperty( Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE );

Javaクラスからスキーマを生成 ツール schemagen schemagen persen/*.java サンプルでは person.Person.java , person.Name.java

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