1 / 33

応用 Java (Java/XML)

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

Télécharger la présentation

応用 Java (Java/XML)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

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

  6. 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>

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

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

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

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

  11. 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>

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

  13. 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>

  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. 対応のまとめ • Java言語 < -- > W3C XML Schema • Java のクラス < -- > スキーマ定義ファイル • Java のインスタンス < -- > XML文書 • Java のフィールド < -- > XMLの要素 (より正確にはプロパティ、属性のケースも)

  16. 新しい ツール xjc (1) • xjc ( XML to Java compiler ) • W3C XML Schema 定義ファイルを Java のクラス定義に xjc sample11.xsd

  17. 前回の実習: 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 に : :

  18. 前回の実習: 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" type="xsd:string"/> </xsd:sequence> </xsd:complexType> => NameType.java に

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

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

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

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

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

  24. 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; }

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

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

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

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

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

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

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

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

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

More Related