Java – ITのキーテクノロジ

応用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 )