応用 Java(Java/XML) 第1回 2006 年4月 14 日
講義内容 (4/14) なぜ Java が重要なのか? なぜ XML が重要なのか? Java と XML の関係 パーサの概念 XML 関連のパッケージについて ファクトリのデザインパターン
Java とはどんな技術か? プログラミング言語としての Java インターネット時代の新しい言語 優れた開発効率 実行環境としての Java 携帯電話からスパコンまで あらゆる装置をネットワーク化
Java は誰が作っているのか ? Sun Microsystems 社の製品 開発環境は無償で提供 ( 対 MS 戦略 ) 「オープンソース」的な成果も採 用
言語としての Java の特徴 オブジェクト指向 (Object Oriented) 仮想マシン (JVM) による実行 スレッドによる並列処理 簡潔な言語仕様 豊富なクラスライブラリ 開発環境は無償、ソース公開
現在の Java の存在 インターネット上の標準言語 (特にサーバサイド) 異なるシステム間に共通の実行環 境 ソースコード共有の新たな運動 apache.org, eclipse.org
Java の登場と発展の背景 Java 誕生以前 ( ) 最初の Java (1995) 実用的開発言語へ (1996) 拡大する応用範囲 (1997~ 99) B2B と Web サービス (2000 ~ )
Java の歴史 1995 α 版、 β 版、 HotJava 1996 JDK JDK Java2, 3 つの Java 1999 J2SDK i503 に Java 搭載 2002 J2SDK 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 による標準化 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 と Java 3 D の比較 X3D(VRML の後継 2002 ~) 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 より core) SAX(Simple API for XML) と DOM DTD 、 XML Schema: 妥当性の検証 名前空間、 XPath, XSLT の処理 J2SE 5.0 より一段と機能が強化
Apache.org の Java,XML Apache Software Foundation ( Apache -- Web サーバの標準に Java,XML 関連のオープンなソフト ウェア開発の中心に Java 関連 (Jakarta プロジェクト他 ) XML 関連 (XML プロジェクト他 )
Java 関連 Apache Jakarta Project ( ) 20 数個のサブプロジェクト Tomcat ( 自身が Java で記述された Web サーバ、 JSP,Servlet エンジンを提供 ) Struts(Web アプリケーションのフレー ムワークを提供 ) Alexandria(Java のソースの分散管理 )
XML 関連 Apache XML Project ( ) 10 数個のサブプロジェクト Xerces (XML Parser) Xalan (XSLT Processer) Cocoon(Web ページの動的生成 ) Xindice(XML データベース ) Apache SOAP, Apache Axis(Web サービスへ )
Java + XML Apache Ant Project ( ) Jakarta から独立してトッププロジェク トに Ant ( ビルドツール make の機能を代替 ) Ant 自身は Java で記述 ビルドファイルは XML
Java で XML を処理するには? XML はテキストファイル =>独自に文字単位で処理は可能 XML は独自の文法を持つ 要素 ( タグ ) と属性 ( 名前と値のペア ) = XML 文書は設計に基づく構造を持つ *自前で処理は煩雑、誰がやっても同じ =>専用のパッケージ (API) があれ ば・・・
XML 文書の処理 XML パーサ (parser) の概念 パーサの規格 (SAX,DOM 、他 ) Java によるパーサの実現 Sun による参照実装 Apache プロジェクト ( )
Java で XML というのな ら・・・ どちらも「標準」、「オープン」が特 徴 API もなるべく「中立」に システム非依存 ( 当然? Java,XML なら ) 言語非依存 ( パーサの設計、動作の側か ら見て ) ライブラリ非依存 ( 複数の実装が共存で きる仕組み ) そのために、多少回りくどくはなる が・・・
XML 関連の API J2SE 1.4 からコアに Apache の XML 関連のプロジェクト Xerces Xarlan Ant Xindice JDOM ( )
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 )