応用 java(java/xml)
DESCRIPTION
応用 Java(Java/XML). 第1回 2006 年4月 14 日. 講義内容 (4/14). なぜ Java が重要なのか? なぜ XML が重要なのか? Java と XML の関係 パーサの概念 XML 関連のパッケージについて ファクトリのデザインパターン. Java とはどんな技術か?. プログラミング言語としての Java インターネット時代の新しい言語 優れた開発効率 実行環境としての Java 携帯電話からスパコンまで あらゆる装置をネットワーク化. Java は誰が作っているのか ?. - PowerPoint PPT PresentationTRANSCRIPT
応用 Java(Java/XML)
第1回2006 年4月 14 日
講義内容 (4/14)
なぜ Java が重要なのか? なぜ XML が重要なのか? Java と XML の関係 パーサの概念 XML 関連のパッケージについて ファクトリのデザインパターン
Java とはどんな技術か? プログラミング言語としての Java インターネット時代の新しい言語 優れた開発効率 実行環境としての Java 携帯電話からスパコンまで あらゆる装置をネットワーク化
Java は誰が作っているのか ?
Sun Microsystems 社の製品 http://java.sun.com/ 開発環境は無償で提供 ( 対 MS 戦
略 ) 「オープンソース」的な成果も採
用
言語としての Java の特徴 オブジェクト指向 (Object
Oriented) 仮想マシン (JVM) による実行 スレッドによる並列処理 簡潔な言語仕様 豊富なクラスライブラリ 開発環境は無償、ソース公開
現在の Java の存在 インターネット上の標準言語 (特にサーバサイド) 異なるシステム間に共通の実行環
境 ソースコード共有の新たな運動 apache.org, eclipse.org
Java の登場と発展の背景 Java 誕生以前 (1969-1994) 最初の Java (1995) 実用的開発言語へ (1996) 拡大する応用範囲 (1997~ 99) B2B と Web サービス (2000
~ )
Java の歴史 1995 α 版、 β 版、 HotJava 1996 JDK1.0 1997 JDK1.1 1998 Java2, 3 つの Java 1999 J2SDK 1.3 2001 i503 に Java 搭載 2002 J2SDK 1.4 2004 J2SE 5.0 (Tiger) 2005 Java 10周年 2006 J2SE 6.0(Mustang)?
Java の祖先? C (1970) 手続き指向、アルゴリズム
の構造化 ( 関数、ループと条件分岐 ) 、データ型の導入 ( 原始型と構造体 )
C++ (1980~) オブジェクト指向、クラス、クラスの継承、アクセス制御、抽象クラス、演算子の多重定義、多重継承、例外処理・・・ ( 次々と機能拡張 )
Java 登場の背景 C++ の機能の肥大化の弊害 開発者の負担軽減 教育コストの軽減 シンプルでかつ多様な環境に対
応できるオブジェクト指向言語
「オープン」な性格のルーツ Sun Microsystems の戦略の要 仕様の公開、開発環境の無償配布 背景に UNIX 文化、オープンソー
ス運動の影響 インターネットの普及 ( 異機種・
異 OS のネットワーク )
XML の登場と発展 XML 以前 XML の多様な用途 データ交換の標準に
XML(1998~) 以前 アプリケーション独自のデータ形式 Tex, PostScript SGML (1986) 非常に柔軟な機能、完
全な対応は高価、 DTD による記述 HTML (1992~) タグの拡張と統
一、 HTML 4.0(1997) シンプルかつ拡張可能な ML の必要性
XML の多様な用途 電子文書 ( 官公庁、企業 ) 出版物 (DOM) Web ページ (XHTML 、 XSLT) 数式 (MathML) グラフィックス (SVG, X3D) マルチメディアの操作と連携 (SMIL) ソフトウェアのビルトツール (Ant)
データ交換の標準に W3C による標準化 http://www.w3c.org/ XML Schema SGML(DTD) から自立 , 自己記述性 B2B, P2P アプリケーションの普及 XML データの動的生成、パイプラ
イン処理 (XSLT, Axis)
Java と XML に共通するもの 先行する技術の蓄積の上に出現し
た「成熟した技術」 シンプルかつ高機能 「規格公開」と「標準化」へのこだわり
活用範囲の爆発的な拡大 (進行中 )
Java と XML の融合 Java と XML は「相性」がいい ? アプリケーション (Java) とデータ
(XML) XML の階層構造を扱う Java のク
ラス XML 処理用のパッケージの役割
アプリケーションとデータ Java のクラス <-> 要素の定義 Java のインスタンス <-> 個々の
要素 Java のクラスのフィールド <-> 個々の要素の属性の定義
Java のインスタンスのフィールド値 <-> 個々の要素の属性値
例: X3D と Java3 D の比較 X3D(VRML の後継 2002 ~)
http://www.web3d.org/
<Box size="1.0 1.0 1.0" /><Appearance> <Material diffuseColor="0.0 0.0 1.0" /></Appearance>
Box box = new Box(1.0f,1.0f,1.0f);Appearance ap= new Appearance();Material mt = new Material();mt.setDifuseColor( new Color3f(1.0f,1.0f,1.0f) );
XML 文書の階層構造の反映 文書の階層構造 -> ツリー構造を表
すクラスのインスタンス DOM (Document Object Model) org.w3c.dom.Node インターフェイ
ス 視覚化 javax.swing.JTree クラス
XML 処理用パッケージの役割 JAXP パッケージ (J2SDK 1.4 より c
ore) SAX(Simple API for XML) と DOM DTD 、 XML Schema: 妥当性の検証 名前空間、 XPath, XSLT の処理 J2SE 5.0 より一段と機能が強化
Apache.org の Java,XML Apache Software Foundation
(http://www.apache.org/) Apache -- Web サーバの標準に Java,XML 関連のオープンなソフトウェア開発の中心に
Java 関連 (Jakarta プロジェクト他 )
XML 関連 (XML プロジェクト他 )
Java 関連 Apache Jakarta Project ( http://jakart
a.apache.org/ ) 20 数個のサブプロジェクト Tomcat ( 自身が Java で記述された Web
サーバ、 JSP,Servlet エンジンを提供 ) Struts(Web アプリケーションのフレー
ムワークを提供 ) Alexandria(Java のソースの分散管理 )
XML 関連 Apache XML Project ( http://xml.apache.or
g/ ) 10 数個のサブプロジェクト Xerces (XML Parser) Xalan (XSLT Processer) Cocoon(Web ページの動的生成 ) Xindice(XML データベース ) Apache SOAP, Apache Axis(Web サービスへ )
Java + XML Apache Ant Project (
http://ant.apache.org/ ) Jakarta から独立してトッププロジェク
トに Ant ( ビルドツール make の機能を代替 )
Ant 自身は Java で記述 ビルドファイルは XML
Java で XML を処理するには? XML はテキストファイル =>独自に文字単位で処理は可能 XML は独自の文法を持つ 要素 ( タグ ) と属性 (名前と値のペア ) < > </> = XML 文書は設計に基づく構造を持つ*自前で処理は煩雑、誰がやっても同じ =>専用のパッケージ (API) があれば・
・・
XML 文書の処理 XML パーサ (parser) の概念 パーサの規格 (SAX,DOM 、他 ) Java によるパーサの実現 Sun による参照実装 Apache プロジェクト ( http://xml.apache.org/ )
Java で XML というのなら・・・ どちらも「標準」、「オープン」が特徴 API もなるべく「中立」に システム非依存 (当然? Java,XML なら ) 言語非依存 ( パーサの設計、動作の側か
ら見て ) ライブラリ非依存 (複数の実装が共存で
きる仕組み ) そのために、多少回りくどくはなるが・
・・
XML 関連の API
J2SE 1.4 からコアに Apache の XML 関連のプロジェクト Xerces Xarlan Ant Xindice JDOM ( http://www.jdom.org/ )
JAXP の発想 多数のパーサの実装を統合する枠組み JAXP 自体は構文解析を行うわけではな
い パーサは JAXP とは独立できる パーサの実装に非依存なアプリケーショ
ン 実現のために抽象化されたクラス群を定
義
J2SE 1.4 以降の API
javax.xml.parsers org.xml.sax org.w3c.dom javax.xml.transform
javax.xml.parsers 最も抽象化されたレベル (JAXP) パーサを「取り出す」ための仕組みを提
供 SAXParser, SAXParserFactory DocumentBuilder, DocumentBuilderFactory 唯一の手段ではないが、「標準」を提供 パーサの実装に制限は課さない
パーサを取得するパターン
SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser parser = spf.newSAXParser();
ファクトリのデザインパターン
なぜファクトリパターンか? 直接インスタンスの生成はしない ( 実装クラスに依存しない記述 )
× SAXParser parser = new SAXParser();
パーサ取得の条件を Factory クラスに設定
org.xml.sax SAX(Simple API for XML) サブパッケージ org.xml.sax.ext org.xml.sax.helpers
org.w3c.dom
Document Node Element :
javax.xml.transform XSLT(XML Stilesheet Transfer) の枠組み Source Result Transformer サブパッケージ javax.xml.transform.sax javax.xml.transform.dom javax.xml.transform.stream
J2SE 5.0 の追加パッケージ javax.xml javax.xml.datatype javax.xml.namespace javax.xml.validation javax.xml.xpath
XML パーサのいろいろ Sun の実装参照 Apache の Crimson (J2SE 1.4) Apahce の Xerces (J2SE 5.0 )