Transcript Java と XML
応用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
1996
1997
1998
1999
2001
2002
2004
2005
2006
α版、β版、HotJava
JDK1.0
JDK1.1
Java2, 3つのJava
J2SDK 1.3
i503にJava搭載
J2SDK 1.4
J2SE 5.0 (Tiger)
Java 10周年
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 Jakarta Project
( 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 )