応用 java (java/xml)

33
12 2007 第 7 第 13 第

Upload: fuller-santiago

Post on 30-Dec-2015

62 views

Category:

Documents


3 download

DESCRIPTION

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

TRANSCRIPT

Page 1: 応用 Java (Java/XML)

第12回  2007 年 7 月 13 日

Page 2: 応用 Java (Java/XML)

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

Page 3: 応用 Java (Java/XML)

XPath (6/15)XSLT (6/22)名前空間 (Namespace) (6/22)XML 文書の妥当性の検証 (6/29) XML SchemaJAXB (7/6, 7/13)SOAP, Web サービ (7/20)試験 (7/27)

Page 4: 応用 Java (Java/XML)

JAXB Java と XML の変換のフレームワーク )

の続き javax.xml.bind パッケージ アプリケーション内で変換の実現 schemagen ツール Java のクラスから W3C XML

Schema を

Page 5: 応用 Java (Java/XML)

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

Page 6: 応用 Java (Java/XML)

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

Page 7: 応用 Java (Java/XML)

JAXB(Java architecture for XML Binding)

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

Page 8: 応用 Java (Java/XML)

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

name.last=“Ueda”;

Page 9: 応用 Java (Java/XML)

XML のドキュメント <nama> <first>Tatsuo</fist> <last>Ueda</last> </name>

要素 <name> -- インスタンス name

要素 <first>,<last> -- フィールドに対応

Page 10: 応用 Java (Java/XML)

インスタンスは個々の XML 文書に対応

クラスの定義は? XML 文書の定義はスキーマ言語 DTD(Document Type Definition) XML Schema W3C XML Schema RELAX NG Schematron

Page 11: 応用 Java (Java/XML)

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

Page 12: 応用 Java (Java/XML)

String first; public String getFirst() { returen first; } public void setFirst( String s ) { first = s;

} <xsd:element name="first" type="xsd:string"/>

基本は 「フィールド ( プロパティ ) 要素」

Page 13: 応用 Java (Java/XML)

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>

Page 14: 応用 Java (Java/XML)

<xsd:complexType name="peopleType">

<xsd:sequence> <xsd:element name="name" type="nameType"

minOccurs="1" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType>

Page 15: 応用 Java (Java/XML)

Java 言語 < -- > W3C XML Schema Java のクラス < -- > スキーマ定義ファイル

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

Page 16: 応用 Java (Java/XML)

xjc ( XML to Java compiler ) W3C XML Schema 定義ファイルを

Java のクラス定義に

xjc sample11.xsd

Page 17: 応用 Java (Java/XML)

<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 に

: :

Page 18: 応用 Java (Java/XML)

<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 に

Page 19: 応用 Java (Java/XML)

パッケージ ( package) クラスのグループ分け、管理をしやすく xjc デフォルトでは自動生成したクラスを

generated というパッケージに --+-- sampel11.xsd +-- generated --+-- PeopleType.java +--

NameType.java +--

ObjectFactory.java

Page 20: 応用 Java (Java/XML)

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;

Page 21: 応用 Java (Java/XML)

@XmlAccessorType(XmlAccessType.FIELD)

@XmlType( name = "Name", propOrder ={ "first",

"last" } ) public class NameType { : :

Page 22: 応用 Java (Java/XML)

「プロパティ」とフィールド ( 3個 )

@XmlElement(required = true) protected String first;

protected String middle;

@XmlElement(required = true) protected String last;

Page 23: 応用 Java (Java/XML)

getter と setter も生成 ( 3 X 2で計6個 )

public String getFirst() { return first; } public void setFirst( String value) { this.first = value; }

Page 24: 応用 Java (Java/XML)

複数の NameType を内部に持つ (setter なし )

@XmlElement(required = true) protected List<NameType> name; : public List<NameType> getName() { if (name == null) name = new

ArrayList<NameType>(); return this.name; }

Page 25: 応用 Java (Java/XML)

内部のコレクションにデータ格納が可能 ( コレクション自身を入れ替える必要なし )

クラス People List Name

Page 26: 応用 Java (Java/XML)

<name> <first>Tatsuo</first> <last>Ueda</last> </name>

Page 27: 応用 Java (Java/XML)

import javax.xml.bind.*; import generated.*; : :JAXBContext jc = JAXBContext.newInstance( "generated

" );

Page 28: 応用 Java (Java/XML)

Unmarshaller u = jc.createUnmarshaller();

JAXBElement element = (JAXBElement)u.unmarshal( new

FileInputStream( "name.xml" ) ); Name name = (Name)element.getValue();

Page 29: 応用 Java (Java/XML)

String first = name.getFirst(); String last = name.getLast(); System.out.println( first + " " + last );

Page 30: 応用 Java (Java/XML)

Name name = new Name(); String first = "Fujio"; String last = "Maruyama"; name.setFirst( first ); name.setLast( last );

Page 31: 応用 Java (Java/XML)

JAXBElement element =new JAXBElement(      new

QName( "name" ), Name.class, name );Marshaller m = jc.createMarshaller(); m.setProperty( Marshaller.JAXB_FORMATTED_OUTPUT,

Boolean.TRUE );

Page 32: 応用 Java (Java/XML)

ツール schemagen

schemagen persen/*.java

サンプルでは person.Person.java ,

person.Name.java

Page 33: 応用 Java (Java/XML)

XPath (6/15)XSLT (6/22)名前空間 (Namespace) (6/22)XML 文書の妥当性の検証 (6/29) XML SchemaJAXB (7/6, 7/13)SOAP, Web サービ (7/20)試験 (7/27)