390 likes | 780 Views
応用 Java(Java/XML). 第1回 2006 年4月 14 日. 講義内容 (4/14). なぜ Java が重要なのか? なぜ XML が重要なのか? Java と XML の関係 パーサの概念 XML 関連のパッケージについて ファクトリのデザインパターン. Java とはどんな技術か?. プログラミング言語としての Java インターネット時代の新しい言語 優れた開発効率 実行環境としての Java 携帯電話からスパコンまで あらゆる装置をネットワーク化. Java は誰が作っているのか ?.
E N D
応用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 と Java3Dの比較 • 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よりcore) • 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 JakartaProject ( http://jakarta.apache.org/ ) • 20数個のサブプロジェクト • Tomcat (自身がJavaで記述されたWebサーバ、JSP,Servletエンジンを提供) • Struts(Webアプリケーションのフレームワークを提供) • Alexandria(Javaのソースの分散管理)
XML関連 • Apache XML Project( http://xml.apache.org/ ) • 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 )