Presentation is loading. Please wait.

Presentation is loading. Please wait.

応用Java(Java/XML) 第7回 2006年6月16日 植田龍男.

Similar presentations


Presentation on theme: "応用Java(Java/XML) 第7回 2006年6月16日 植田龍男."— Presentation transcript:

1 応用Java(Java/XML) 第7回 2006年6月16日 植田龍男

2 後半の内容の予定 XPath (6/9) XSLT (6/16) 名前空間(Namespace) (6/16)
XML文書の妥当性の検証(6/23) DTD,XML Schema SOAP, RMI (7月以降)

3 J2SE 5.0 と XML API javax.xml javax.xml.parsers javax.xml.transform
javax.xml.transform.dom javax.xml.transform.sax javax.xml.transform.stream javax.xml.xpath javax.xml.namespace javax.xml.validation javax.xml.datatype

4 javax.xml.transform javax.xml.transform javax.xml.transform.dom
javax.xml.transform.sax javax.xml.transform.stream

5 XSLTとは? XSL Transform XML文書を別の形式の文書へ変換
XSL(eXtensible Stylesheet Language) 変換のルールもまたXML文書で記述 (XSLファイル) 変換前の文書、変換後の文書、変換のための文書

6 変換前の文書の例 <document> <title>Java and XML</title>
<text> Let's begin, now! </text> <image s="java.png" w="128" h="64"/> </document>

7 XSLTによる変換の例(1) <xsl:stylesheet version="1.0"
xmlns:xsl=" XSL/Transform"> <xsl:template match="/"> : </xsl:template> </xsl:stylesheet>

8 XSLTによる変換の例(2) <xsl:template match="text"> <p>
<xsl:apply-templates /> </p> </xsl:template>

9 XSLTによる変換の例(3) <xsl:template match="title“ mode="inhead">
<xsl:apply-templates /> </title> </xsl:template>

10 XSLTによる変換の例(4) <xsl:template match="image"> <img>
<xsl:attribute name="src"> <xsl:value-of </xsl:attribute> </img> </xsl:template>

11 参照:XPath の検索パターン abc //abc abc[1] @xyz

12 XSLT のAPI(1) javax.xml.transform パッケージ インタフェース Source 抽象化された入力元 変換前の文書
インタフェース Result 抽象化された出力先 変換後の文書

13 SourceやResultの実体は? ローカルファイル Web上の資源 DOMツリー SAXで処理中の文書 *それぞれに応じて実体を提供
3つのサブパッケージの役割り 処理そのものに違いは生じない

14 XSLT のAPI(2) Source inputSource = new StreamSource( "sample6.xml" );
Source transSource = new StreamSource( "trans.xsl" ); Result outputResult = new StreamResult( System.out );

15 XSLT のAPI(3) Transofromerクラス 変換を実行する抽象クラス TransformerFactory tf
= TransformerFactory.newInstance(); Transformer transformer = tf.newTransformer( transSource );

16 XSLT のAPI(4) 変換の実行 transformer.transform( inputSource, outputResult );

17 変換後の文書の例 <html>
<head> <title>Java and XML</title> </head> <body> <h1>Java and XML</h1> <hr> <p> Let's begin, now! :

18 ところで気になることが・・・ <xsl:template match="text"> の xsl: ってどういう意味?
<xsl:stylesheet version="1.0" xmlns:xsl=" XSL/Transform"> のURIは何の働きをしているの?

19 名前空間とは? 名前の衝突の回避(一意性の保証) ローカル名の前に「場所」を指定 XML以外でも利用

20 XMLの名前空間の例(1) Prefix <wakhok:image source="java.png“
width="512" height="400"/> : <tatsuo:image src="elephant.png“ w="64“ h="64"/>

21 XMLの名前空間の例(2) URI <wakhok:document xmlns:wakhok
=" xmlns:tatsuo =" <wakhok:title> Java and XML</wakhok:title> : </wakhok:document>

22 名前空間の例(3) 有効範囲 <tatsuo:image src="elephant.png“ w="64" h="64"
xmlns:tatsuo ="

23 名前空間の例(4) Prefixの省略 Prefixの名称を省略(URIのみ指定) この場合でも立派な名前空間 <document
xmlns=" <title>Java and XML</title> <image s="java.png" w="128" h="64"/> </document>

24 名前空間の例(5) 特別なPrefix xmlns: はなぜURIなしでもいいのか? xml で始まるプレフィックスは特別
<xml:image source="elephant.png" xmlns:xml=" この表記はエラーとなる

25 名前空間の処理(1) パーサへの通知(Factoryクラスに) SAXParserFactory spf
  = SAXParserFactory.newInstance(); spf.setNamespaceAware( true ); SAXParser parser = spf.newSAXParser();

26 名前空間の処理(2) PrefixとURIの処理がポイント void startElement( String uri,
String localName, Stirng qName, Attributes attr )

27 SAX処理での名前空間の検知 ある名前空間の有効範囲に入った時
startPrefixMapping( String p, String u) ある名前空間の有効範囲が終わった時 endPrefixMapping( String p )

28 javax.xml.namespace たった1つのインタフェース NamespaceContext たった1つのクラス QName

29 NamespaceContext 3個のメソッドの実装を要求 プレフィックスとURIの変換の手段
getNamespaceURI( String prefix) getPrefix( String uri ) getPrefixes( String uri ) URI : Prefix は1対他の可能性もある

30 QName (Qualified Name )
URI, Prefix, ローカル名の情報を格納 QName(String local) QName(String uri, String local) QName(String uri, String local, String prefix) getLocalPart(), getPrefix() getNamespaceURI() equals() – URIとローカル名のみで判定 toString() – { URI }localName の形式

31 Quorified Name Qnameクラスの利用例 public void startElement(
String nameSpace, String localName, String qName, Attributes attrs ) { System.out.println( new QName( nameSpace, localName ) );


Download ppt "応用Java(Java/XML) 第7回 2006年6月16日 植田龍男."

Similar presentations


Ads by Google