31
2007 第 6 第 22 第

応用 Java (Java/XML)

  • Upload
    chelsa

  • View
    46

  • Download
    1

Embed Size (px)

DESCRIPTION

第9回  2007 年 6 月 22 日. 応用 Java (Java/XML). 前回までやったこと. 「 XML パーサ」 -- Java で XML を処理 javax.xml.stream パッケージのパーサ SAX(Simple API for XML) のパーサ DOM(Document Object Model) のパーサ 応用 (1) – テーブルの利用 応用 (2) – フィルタ的な処理 応用 (3) – DOM ツリーの検索 応用 (4) – DOM ツリーの視覚化 XPath -- XML 文書内の検索. - PowerPoint PPT Presentation

Citation preview

Page 1: 応用 Java (Java/XML)

第9回  2007 年 6 月 22 日

Page 2: 応用 Java (Java/XML)

「 XML パーサ」 -- Java で XML を処理 javax.xml.stream パッケージのパーサ SAX(Simple API for XML) のパーサDOM(Document Object Model) のパーサ応用 (1) – テーブルの利用応用 (2) – フィルタ的な処理 応用 (3) – DOM ツリーの検索応用 (4) – DOM ツリーの視覚化XPath -- XML 文書内の検索

Page 3: 応用 Java (Java/XML)

フィルタ的処理の効率化文書の整形・変換 XSL と XSLT javax.xml.transform javax.xml.transform.stream javax.xml.transform.sax javax.xml.transform.dom

Page 4: 応用 Java (Java/XML)

XPath (6/15)XSLT (6/22)名前空間 (Namespace) (6/22)XML 文書の妥当性の検証 (6/29) XML SchemaJAXB, SOAP, Web サービス ( 7月以降)

Page 5: 応用 Java (Java/XML)

XSL Transform XML 文書を別の形式の文書へ変換 XSL(eXtensible Stylesheet

Language) 変換のルールもまた XML 文書で記述

(XSL ファイル )変換前の文書、変換後の文書、変換のための文書

Page 6: 応用 Java (Java/XML)

<document> <title>Java and XML</title> <text> Let's begin, now! </text> <image s=“java.png” w=“128”

h="64"/> </document>

Page 7: 応用 Java (Java/XML)

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/ XSL/Transform"> <xsl:template match="/"> : </xsl:template>

</xsl:stylesheet>

Page 8: 応用 Java (Java/XML)

<xsl:template match="text"> <p> <xsl:apply-templates /> </p> </xsl:template>

Page 9: 応用 Java (Java/XML)

<xsl:template match="title” mode="inhead">

<title> <xsl:apply-templates /> </title> </xsl:template>

Page 10: 応用 Java (Java/XML)

<xsl:template match="image"> <img> <xsl:attribute name="src"> <xsl:value-of

select="@s"/> </xsl:attribute> </img> </xsl:template>

Page 11: 応用 Java (Java/XML)

abc //abc abc[1] @xyz

Page 12: 応用 Java (Java/XML)

javax.xml.transform パッケージインタフェース Source 抽象化された入力元 変換前の文書 変換の XSL ファイルインタフェース Result 抽象化された出力先 変換後の文書

Page 13: 応用 Java (Java/XML)

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

Page 14: 応用 Java (Java/XML)

Source inputSource = new

StreamSource( "sample6.xml" ); Source transSource = new StreamSource( "trans.xsl" ); Result outputResult = new StreamResult( System.out );

Page 15: 応用 Java (Java/XML)

Transofromer クラス 変換を実行する抽象クラス

TransformerFactory tf = TransformerFactory.newInstance();Transformer transformer = tf.newTransformer( transSource );

Page 16: 応用 Java (Java/XML)

変換の実行

transformer.transform(      inputSource,

outputResult );

*これで Result に結果が格納

Page 17: 応用 Java (Java/XML)

public static void main( String[] args ) {

Source inputSource = new StreamSource( "sample6.xml" );

Source transSource = new StreamSource( args[0] ); Result outputResult = new StreamResult( System.out

); TransformerFactory tf = TransformerFactory.newInstance(); Transformer transformer = tf.newTransformer( transSource ); transformer.transform( inputSource, outputResult ); }

Page 18: 応用 Java (Java/XML)

<html> <head> <title>Java and

XML</title> </head> <body> <h1>Java and XML</h1> <hr> <p> Let's begin, now! :

Page 19: 応用 Java (Java/XML)

<xsl:template match="text"> の xsl: ってどういう意味?<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/

XSL/Transform"> の URI は何の働きをしているの?

Page 20: 応用 Java (Java/XML)

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

Page 21: 応用 Java (Java/XML)

<wakhok:image source="java.png“ width="512" height="400"/> : <tatsuo:image src="elephant.png“ w="64“ h="64"/>

Page 22: 応用 Java (Java/XML)

<wakhok:document xmlns:wakhok ="http://www.wakhok.ac.jp/public"

xmlns:tatsuo ="http://www.wakhok.ac.jp/tatsuo"> <wakhok:title> Java </wakhok:title> <tatsuo:title> XML </tatsuo:title> :</wakhok:document>

Page 23: 応用 Java (Java/XML)

<tatsuo:doc xmlns:tatsuo

="http://www.tatsuo.com"/> <tatsuo:title> Java

</tatsuo:title> <tatsuo:image s=“java.png” /> </tatsuo:doc>

Page 24: 応用 Java (Java/XML)

Prefix の名称を省略 (URI のみ指定 )この場合でも立派な名前空間 <document

xmlns="http://www.wakhok.ac.jp/"> <title>Java and XML</title>

<image s="java.png" w="128" h="64"/>

</document>

Page 25: 応用 Java (Java/XML)

xmlns: はなぜ URI なしでもいいのか? xml で始まるプレフィックスは特別 ( 一般の XML 文書では使用できない )

<xml:image source="elephant.png"

xmlns:xml="http://www.wakhok.ac.jp"/>

この表記はエラーとなる

Page 26: 応用 Java (Java/XML)

たった1つのインタフェース NamespaceContextたった1つのクラス QName

Page 27: 応用 Java (Java/XML)

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 の形式

Page 28: 応用 Java (Java/XML)

javax.xml.stream パッケージの場合

常に名前空間を認識処理は QName クラスを利用

Page 29: 応用 Java (Java/XML)

名前空間の処理はオプショナルパーサへの通知 (Factory クラスに )

SAXParserFactory spf  =

SAXParserFactory.newInstance();spf.setNamespaceAware( true ); SAXParser parser =

spf.newSAXParser();

Page 30: 応用 Java (Java/XML)

Prefix と URI の処理がポイント

void startElement( String uri, String localName, Stirng qName, Attributes attr )

Page 31: 応用 Java (Java/XML)

ある名前空間の有効範囲に入った時 startPrefixMapping( String p,

String u)ある名前空間の有効範囲が終わった時 endPrefixMapping( String p )