応用 Java (Java/XML)
-
Upload
fuller-santiago -
Category
Documents
-
view
63 -
download
3
description
Transcript of 応用 Java (Java/XML)
![Page 1: 応用 Java (Java/XML)](https://reader038.fdocuments.net/reader038/viewer/2022102818/56812a88550346895d8e2776/html5/thumbnails/1.jpg)
第12回 2007 年 7 月 13 日
![Page 2: 応用 Java (Java/XML)](https://reader038.fdocuments.net/reader038/viewer/2022102818/56812a88550346895d8e2776/html5/thumbnails/2.jpg)
「 XML パーサ」 -- Java で XML を処理 javax.xml.stream パッケージのパーサ SAX(Simple API for XML) のパーサ DOM(Document Object Model) のパーサ パーサの応用 : 検索 , フィルタ的な処理 、視覚化パーサの上位のサービス XPath , XSLT スキーマ言語と妥当性の検証 JAXB( Java とスキーマとの変換 )
![Page 3: 応用 Java (Java/XML)](https://reader038.fdocuments.net/reader038/viewer/2022102818/56812a88550346895d8e2776/html5/thumbnails/3.jpg)
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)](https://reader038.fdocuments.net/reader038/viewer/2022102818/56812a88550346895d8e2776/html5/thumbnails/4.jpg)
JAXB Java と XML の変換のフレームワーク )
の続き javax.xml.bind パッケージ アプリケーション内で変換の実現 schemagen ツール Java のクラスから W3C XML
Schema を
![Page 5: 応用 Java (Java/XML)](https://reader038.fdocuments.net/reader038/viewer/2022102818/56812a88550346895d8e2776/html5/thumbnails/5.jpg)
スキーマ言語 – XML 文書のルールを定める DTD (document type definition) XML Schema W3C XML Schema RELAX NG Schematron
![Page 6: 応用 Java (Java/XML)](https://reader038.fdocuments.net/reader038/viewer/2022102818/56812a88550346895d8e2776/html5/thumbnails/6.jpg)
<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)](https://reader038.fdocuments.net/reader038/viewer/2022102818/56812a88550346895d8e2776/html5/thumbnails/7.jpg)
JAXB(Java architecture for XML Binding)
Java と XML とのマッピングを提供新しい Web サービスを支える基礎技術アノテーションをフルに活用
![Page 8: 応用 Java (Java/XML)](https://reader038.fdocuments.net/reader038/viewer/2022102818/56812a88550346895d8e2776/html5/thumbnails/8.jpg)
Java のクラスとインスタンス public class Name { String first; String last; }--------------------------------------------------- Name name = new Name(); name.first=“Tatsuo”;
name.last=“Ueda”;
![Page 9: 応用 Java (Java/XML)](https://reader038.fdocuments.net/reader038/viewer/2022102818/56812a88550346895d8e2776/html5/thumbnails/9.jpg)
XML のドキュメント <nama> <first>Tatsuo</fist> <last>Ueda</last> </name>
要素 <name> -- インスタンス name
要素 <first>,<last> -- フィールドに対応
![Page 10: 応用 Java (Java/XML)](https://reader038.fdocuments.net/reader038/viewer/2022102818/56812a88550346895d8e2776/html5/thumbnails/10.jpg)
インスタンスは個々の XML 文書に対応
クラスの定義は? XML 文書の定義はスキーマ言語 DTD(Document Type Definition) XML Schema W3C XML Schema RELAX NG Schematron
![Page 11: 応用 Java (Java/XML)](https://reader038.fdocuments.net/reader038/viewer/2022102818/56812a88550346895d8e2776/html5/thumbnails/11.jpg)
<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)](https://reader038.fdocuments.net/reader038/viewer/2022102818/56812a88550346895d8e2776/html5/thumbnails/12.jpg)
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)](https://reader038.fdocuments.net/reader038/viewer/2022102818/56812a88550346895d8e2776/html5/thumbnails/13.jpg)
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)](https://reader038.fdocuments.net/reader038/viewer/2022102818/56812a88550346895d8e2776/html5/thumbnails/14.jpg)
<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)](https://reader038.fdocuments.net/reader038/viewer/2022102818/56812a88550346895d8e2776/html5/thumbnails/15.jpg)
Java 言語 < -- > W3C XML Schema Java のクラス < -- > スキーマ定義ファイル
Java のインスタンス < -- > XML 文書 Java のフィールド < -- > XML の要素 ( より正確にはプロパティ、属性のケースも )
![Page 16: 応用 Java (Java/XML)](https://reader038.fdocuments.net/reader038/viewer/2022102818/56812a88550346895d8e2776/html5/thumbnails/16.jpg)
xjc ( XML to Java compiler ) W3C XML Schema 定義ファイルを
Java のクラス定義に
xjc sample11.xsd
![Page 17: 応用 Java (Java/XML)](https://reader038.fdocuments.net/reader038/viewer/2022102818/56812a88550346895d8e2776/html5/thumbnails/17.jpg)
<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)](https://reader038.fdocuments.net/reader038/viewer/2022102818/56812a88550346895d8e2776/html5/thumbnails/18.jpg)
<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)](https://reader038.fdocuments.net/reader038/viewer/2022102818/56812a88550346895d8e2776/html5/thumbnails/19.jpg)
パッケージ ( package) クラスのグループ分け、管理をしやすく xjc デフォルトでは自動生成したクラスを
generated というパッケージに --+-- sampel11.xsd +-- generated --+-- PeopleType.java +--
NameType.java +--
ObjectFactory.java
![Page 20: 応用 Java (Java/XML)](https://reader038.fdocuments.net/reader038/viewer/2022102818/56812a88550346895d8e2776/html5/thumbnails/20.jpg)
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)](https://reader038.fdocuments.net/reader038/viewer/2022102818/56812a88550346895d8e2776/html5/thumbnails/21.jpg)
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType( name = "Name", propOrder ={ "first",
"last" } ) public class NameType { : :
![Page 22: 応用 Java (Java/XML)](https://reader038.fdocuments.net/reader038/viewer/2022102818/56812a88550346895d8e2776/html5/thumbnails/22.jpg)
「プロパティ」とフィールド ( 3個 )
@XmlElement(required = true) protected String first;
protected String middle;
@XmlElement(required = true) protected String last;
![Page 23: 応用 Java (Java/XML)](https://reader038.fdocuments.net/reader038/viewer/2022102818/56812a88550346895d8e2776/html5/thumbnails/23.jpg)
getter と setter も生成 ( 3 X 2で計6個 )
public String getFirst() { return first; } public void setFirst( String value) { this.first = value; }
![Page 24: 応用 Java (Java/XML)](https://reader038.fdocuments.net/reader038/viewer/2022102818/56812a88550346895d8e2776/html5/thumbnails/24.jpg)
複数の 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)](https://reader038.fdocuments.net/reader038/viewer/2022102818/56812a88550346895d8e2776/html5/thumbnails/25.jpg)
内部のコレクションにデータ格納が可能 ( コレクション自身を入れ替える必要なし )
クラス People List Name
![Page 26: 応用 Java (Java/XML)](https://reader038.fdocuments.net/reader038/viewer/2022102818/56812a88550346895d8e2776/html5/thumbnails/26.jpg)
<name> <first>Tatsuo</first> <last>Ueda</last> </name>
![Page 27: 応用 Java (Java/XML)](https://reader038.fdocuments.net/reader038/viewer/2022102818/56812a88550346895d8e2776/html5/thumbnails/27.jpg)
import javax.xml.bind.*; import generated.*; : :JAXBContext jc = JAXBContext.newInstance( "generated
" );
![Page 28: 応用 Java (Java/XML)](https://reader038.fdocuments.net/reader038/viewer/2022102818/56812a88550346895d8e2776/html5/thumbnails/28.jpg)
Unmarshaller u = jc.createUnmarshaller();
JAXBElement element = (JAXBElement)u.unmarshal( new
FileInputStream( "name.xml" ) ); Name name = (Name)element.getValue();
![Page 29: 応用 Java (Java/XML)](https://reader038.fdocuments.net/reader038/viewer/2022102818/56812a88550346895d8e2776/html5/thumbnails/29.jpg)
String first = name.getFirst(); String last = name.getLast(); System.out.println( first + " " + last );
![Page 30: 応用 Java (Java/XML)](https://reader038.fdocuments.net/reader038/viewer/2022102818/56812a88550346895d8e2776/html5/thumbnails/30.jpg)
Name name = new Name(); String first = "Fujio"; String last = "Maruyama"; name.setFirst( first ); name.setLast( last );
![Page 31: 応用 Java (Java/XML)](https://reader038.fdocuments.net/reader038/viewer/2022102818/56812a88550346895d8e2776/html5/thumbnails/31.jpg)
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)](https://reader038.fdocuments.net/reader038/viewer/2022102818/56812a88550346895d8e2776/html5/thumbnails/32.jpg)
ツール schemagen
schemagen persen/*.java
サンプルでは person.Person.java ,
person.Name.java
![Page 33: 応用 Java (Java/XML)](https://reader038.fdocuments.net/reader038/viewer/2022102818/56812a88550346895d8e2776/html5/thumbnails/33.jpg)
XPath (6/15)XSLT (6/22)名前空間 (Namespace) (6/22)XML 文書の妥当性の検証 (6/29) XML SchemaJAXB (7/6, 7/13)SOAP, Web サービ (7/20)試験 (7/27)