第9回 2007年6月22日 応用Java (Java/XML).

Slides:



Advertisements
Similar presentations
XML ゼミ 独習 XML ~ 第 6 章 XHTML~ 6.1 XHTML の概要 6.2 XHTML の構造 谷津 哲平.
Advertisements

応用 Java(Java/XML) 第1回 2006 年4月 14 日. 講義内容 (4/14) なぜ Java が重要なのか? なぜ XML が重要なのか? Java と XML の関係 パーサの概念 XML 関連のパッケージについて ファクトリのデザインパターン.
Web サービス II ( 第 13 回 )‏ 2008 年 1 月 9 日 植田龍男. 本日の目的 Web サービスの歴史と将来の展望 (1) WSDL 2.0 の登場 ‏ Jersey プロジェクト Ver 0.5 による開発.
プログラミング第5回 1 while ループ 文字列の操作
応用 Java(Java/XML) 第 10 回 2006 年 7 月 14 日 植田龍男. 後半の内容の予定 XPath (6/9) 、 XSLT (6/16) 名前空間 (Namespace) (6/16) XML 文書の妥当性の検証 (6/23) DTD, W3C XML Schema SOAP.
WebサービスII (第12回)‏ 2007年12月19日 植田龍男.
社会人学習講座 「Javaプログラミング概論」
Webサービスに関する基本用語 Masatoshi Ohishi / NAOJ & Sokendai
2006年11月15日 植田龍男 Webサービス II (第8回) 年11月15日 植田龍男.
2006年11月22日 植田龍男 Webサービス II (第9回) 年11月22日 植田龍男.
Java I 第2回 (4/18)
NC-2 情報通信基礎実験 WEBデザイン基礎実験 (2日目) 担当:清水,田代 副手:浦辺,石井.
事前準備 ttsshでのログイン フォルダ名 XML ファイルコピー  cp ~hurry-go-round/Java/XML/* .
Applet 岡部 祐典 鈴木 敬幸.
背景 我々の研究室で開発しているJavaプログラム解析フレ ームワークでは,解析情報はメモリ上に保持される 問題点
WebサービスII (第10回) 2007年11月28日 植田龍男.
アルゴリズムとプログラミング (Algorithms and Programming)
WSDL と JAX-RPC 年10月13日 Webサービス II (第3回) WSDL と JAX-RPC 年10月13日.
第5回 2007年5月25日 応用Java (Java/XML).
第4回 2007年5月11日 応用Java (Java/XML).
独習Java ・ 10.6  Hashtableクラス ・ 10.7  String Tokenizerクラス  12月12日    小笠原 一恵.
卒研:データベースチーム 第4回 DOMを使った処理
WebサービスII (第8回) 2007年11月14日 植田龍男.
繰り返し プログラミング 第4回 繰り返し プログラミング第4回.
XSLT XML文書はそのままでは読み易い形で表示されない。 XML文書を別のXML文書に変換して、情報抽出や表示をする枠組みがXSLT。
WSDL と JAX-RPC 年10月20日 Webサービス II (第4回) WSDL と JAX-RPC 年10月20日.
2005年10月6日 植田龍男 Webサービス II (第2回) 年10月6日 植田龍男.
第20章 Flyweight ~同じものを共有して無駄をなくす~
Bridge Pattern
Javaプログラムの実行まで バイト Javaの コード 実行 ソースコード Java ファイル名 ファイル名 abc.java
XMLゼミ 5.1 XML文書と表示 5.2 CSS 5.3 XMLとXSL 高橋 辰裕.
XSL-FO + MathML MathML表示、PDF生成、SVG生成
第12回 2007年7月13日 応用Java (Java/XML).
9.1 DOMの概要 9.2 DOMプログラミングの基礎 9.3 DOMのプログラミング例
第10回 2007年6月29日 応用Java (Java/XML).
Webサービス II(第3回) 2007年10月10日.
XMLゼミ 5.4 XSLT (P118~P134)          兒玉 光太郎.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
第11回 2007年7月6日 応用Java (Java/XML).
第8回 2007年6月15日 応用Java (Java/XML).
第3回 2007年4月27日 応用Java (Java/XML).
WebサービスII (第7回) 2007年11月7日 植田龍男.
第7回 2007年6月8日 応用Java (Java/XML).
第6回 2007年6月1日 応用Java (Java/XML).
第1回 2007年4月13日 応用Java (Java/XML).
インラインスクリプトに対するデータフロー 解析を用いた XHTML 文書の構文検証
10-1 SAXの概要 10-2 Saxプログラミングの基礎 10-3 saxのプログラム例
Javaによる Webアプリケーション入門 第2回
7.4 intanceof 演算子 7.5~7.9パッケージ 2003/11/28 紺野憲一
第2回 2007年4月20日 応用Java (Java/XML).
XMLゼミ 1.3 XML文書の表示 1.4 XMLの役割 1.5 XMLとプログラミング M2 正木 裕一.
独習XML ~第3章 文書と構造~ 3.3 スキーマ 3.3 XML Schema
2006年11月8日 植田龍男 Webサービス II (第7回) 年11月8日 植田龍男.
第1章 実世界のモデル化と形式化 3.地物インスタンスの表現
第13回 2007年7月20日 応用Java (Java/XML).
パッケージ,アクセス修飾子 2008年4月27日 海谷 治彦.
Servlet ソフトウェア特論 第7回.
XML Schema (1) ソフトウェア特論 第3回 /
「XML技術者育成教材」 -XMLエンジニア育成のための実践テキスト-
~let's take fun when you can do it~
応用Java(Java/XML) 第7回 2006年6月16日 植田龍男.
アルゴリズムとプログラミング (Algorithms and Programming)
独習XML ~第1章 XMLの基礎~ 1.1 XML文書の基礎 1.2 XMLとHTML
第14回放送授業.
JSPの基本 J2EE I (データベース論) 第8回 /
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
2006年10月18日 植田龍男 Webサービス II (第4回) 年10月18日 植田龍男.
応用Java(Java/XML) 第8回 2005年6月9日 植田龍男.
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
応用Java(Java/XML) 第8回 2005年6月23日 植田龍男.
Presentation transcript:

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

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

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

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

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

XSLTによる変換の例(1) <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/ XSL/Transform"> <xsl:template match="/"> : </xsl:template> </xsl:stylesheet>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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>

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

名前空間の例(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>

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

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

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

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

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

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

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