応用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 )
© Copyright 2024 ExpyDoc