1 / 31

応用 Java (Java/XML)

第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 文書内の検索.

chelsa
Download Presentation

応用 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. 第9回 2007年6月22日 応用Java (Java/XML)

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

  3. 本日(6/22)の講義内容 • フィルタ的処理の効率化 • 文書の整形・変換 • XSLとXSLT • javax.xml.transform javax.xml.transform.stream javax.xml.transform.sax javax.xml.transform.dom

  4. 後半の内容の予定 • XPath (6/15) • XSLT (6/22) • 名前空間(Namespace) (6/22) • XML文書の妥当性の検証(6/29) XML Schema • JAXB, SOAP, Webサービス(7月以降)

  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="http://www.w3.org/1999/ 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"> <title> <xsl:apply-templates /> </title> </xsl:template>

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

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

  12. XSLT のAPI(1) • javax.xml.transform パッケージ • インタフェース Source 抽象化された入力元 変換前の文書 変換のXSLファイル • インタフェース 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 ); *これでResultに結果が格納

  17. 本日のサンプルプログラム 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 ); }

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

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

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

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

  22. XMLの名前空間の例(2) URI <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>

  23. 名前空間の例(3) 有効範囲 <tatsuo:doc xmlns:tatsuo ="http://www.tatsuo.com"/> <tatsuo:title> Java </tatsuo:title> <tatsuo:image s=“java.png” /> </tatsuo:doc>

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

  25. 名前空間の例(5) 特別なPrefix • xmlns: はなぜURIなしでもいいのか? • xml で始まるプレフィックスは特別 (一般のXML文書では使用できない) <xml:image source="elephant.png" xmlns:xml="http://www.wakhok.ac.jp"/> この表記はエラーとなる

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

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

  28. 名前空間の処理 • javax.xml.stream パッケージの場合 • 常に名前空間を認識 • 処理は QName クラスを利用

  29. 名前空間の処理:SAX,DOM(1) • 名前空間の処理はオプショナル • パーサへの通知(Factoryクラスに) SAXParserFactory spf = SAXParserFactory.newInstance(); spf.setNamespaceAware( true ); SAXParser parser = spf.newSAXParser();

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

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

More Related