ORACLE JAPAN Server Release 6.1

 

  |  

  WebLogic Server ホーム   |      XML プログラミング ガイド   |   前へ   |   次へ   |   目次   |   索引   |   PDF 版

XML の概要

 

以下の節では XML テクノロジと WebLogic Server XML サブシステムについて概説します。

 


XML とは

Extensible Markup Language (XML)とは、ドキュメント内のデータの内容および構造を示すのに使用するマークアップ言語です。XML は、Standardized General Markup Language (SGML)を簡素化したものです。XML は、インターネット上でコンテンツを配信するための業界標準です。また、新しいタグを定義する機能があるので、拡張が可能です。

HTML と同じように、XML でもタグを使用してコンテンツを記述します。しかし、XML のタグはコンテンツの表示方法ではなく、データの意味と階層構造を表します。この機能を使用すれば、異なるプログラムやシステム間でのデータ交換を効率化するために必要な高度なデータ型を定義できます。さらに、XML ではコンテンツと表現を分離できるため、コンテンツ(データ)を異種システム間で移植できます。

XML 構文では、一対の開始タグと終了タグ(<name></name> など)を使用して情報をマークアップします。タグで区切られる情報のことを、要素と呼びます。どの XML ドキュメントにもルート要素が 1 つあります。ルート要素は、他のすべての要素を含む最上位の要素です。他の要素内に含まれる要素をしばしば下位要素と言います。要素には、名前と値のペアという構造の属性が付くことがあります。属性は、要素の一部として要素をさらに定義するのに使用します。

次のサンプル XML ファイルでは、アドレス帳の内容を説明します。

<?xml version="1.0"?>

<address_book>
<person gender="f">
<name>Jane Doe</name>
<address>
<street>123 Main St.</street>
<city>San Francisco</city>
<state>CA</state>
<zip>94117</zip>
</address>
<phone area_code=415>555-1212</phone>
</person>
<person gender="m">
<name>John Smith</name>
<phone area_code=510>555-1234</phone>
<email>johnsmith@somewhere.com</email>
</person>
</address_book>

XML ファイルのルート要素は、address_book です。アドレス帳には現在、person 要素の形で「Jane Doe」と「John Smith」の 2 つのエントリがあります。Jane Doe のエントリには住所と電話番号、John Smith のエントリには電話番号と電子メール アドレスがあります。この XML ドキュメントの構造では、要素の本体の下位要素ではなく、phone 要素に area_code 属性を指定して市外局番を格納するように定義しています。すべての下位要素が person 要素で必要なわけではないことにも注意してください。

 


XML ドキュメントの記述方法

XML ドキュメントの記述方法には、DTD および スキーマの 2 種類があります。

DTD(Document Type Definition : 文書型定義)は、XML ドキュメントの構造で基本的に必要なものを定義します。DTD では、XML ドキュメントで有効な要素と属性、およびそれらが有効となるコンテキストを定義します。言い換えれば、DTD では特定のタグ内で有効なタグ、およびオプションのタグと属性を指定します。

次の例では、上のアドレス帳のサンプル XML ドキュメントを定義する DTD を示します。

<!DOCTYPE address_book [
<!ELEMENT person (name, address?, phone?, email?)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT address (street, city, state, zip)>
<!ELEMENT phone (#PCDATA)>
<!ELEMENT email (#PCDATA)>
<!ELEMENT street (#PCDATA)>
<!ELEMENT city (#PCDATA)>
<!ELEMENT state (#PCDATA)>
<!ELEMENT zip (#PCDATA)>

<!ATTLIST person gender CDATA #REQUIRED>
<!ATTLIST phone area_code CDATA #REQUIRED>
]>

スキーマは、XML 仕様において最近開発され、DTD に取って代わるものとされています。スキーマでは、DTD および DTD 以外の XML ドキュメント自体より柔軟かつ詳細に XML ドキュメントを記述します。スキーマ仕様は、現在 World Wide Web Consortium(W3C)によって開発中であり、DTD の制限の多くを克服するものとされています。XML スキーマの詳細については、http://www.w3.org/TR/xmlschema-0/ を参照してください。

次の例では、上のアドレス帳のサンプル XML ドキュメントを定義するスキーマを示します。

<xsd:schema xmlns:xsd="http://www.w3.org/1999/XMLSchema">

<xsd:element name="address_book" type="bookType"/>

<xsd:complexType name="bookType">
<xsd:element name=name="person" type="personType"/>
</xsd:complexType>

<xsd:complexType name="personType">
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="address" type="addressType"/>
<xsd:element name="phone" type="phoneType"/>
<xsd:element name="email" type="xsd:string"/>
<xsd:attribute name="gender" type="xsd:string"/>
</xsd:complexType>

<xsd:complexType name="addressType">

<xsd:element name="street" type="xsd:string"/>
<xsd:element name="city" type="xsd:string"/>
<xsd:element name="state" type="xsd:string"/>
<xsd:element name="zip" type="xsd:string"/>
</xsd:complexType>

<xsd:simpleType name="phoneType">
<xsd:restriction base="xsd:string"/>
<xsd:attribute name="area_code" type="xsd:string"/>
</xsd:simpleType>

</xsd:schema>

XML ドキュメントでは、ドキュメント自体の一部として DTD またはスキーマを指定することも、DOCTYPE 宣言で外部 DTD またはスキーマを参照することも、DTD やスキーマをまったく指定または参照しないようにすることもできます。次の XML ドキュメントの抜粋では、address.dtd という外部 DTD を参照する方法を示しています。

<?xml version=1.0?>
<!DOCTYPE address_book SYSTEM "address.dtd">
<address_book>
...

XML ドキュメントは、パーサで検証する場合、または複雑なタイプが含まれる場合にのみ DTD またはスキーマを付ける必要があります。XML ドキュメントは、1) 関連する DTD またはスキーマがある場合、および 2) 関連する DTD またはスキーマに定義されている制約に準拠している場合に有効であると見なされます。ただし、XML ドキュメントが整形式でなければならない場合は、ドキュメントに DTD またはスキーマを付ける必要はありません。W3C の XML 1.0 勧告のすべてのルールに従っている場合、ドキュメントは整形式と見なされます。XML 1.0 仕様の完全な説明については、http://www.w3.org/XML/ を参照してください。

 


XML を使用する理由

通常、ある業界では、その業界にとって意味がある固有のデータ交換方式を使用しています。電子商取引の誕生により、企業ではさまざまな業界と関係を結ぶようになっています。このため、こうした企業は、これらの業界で使用されるさまざまな電子通信プロトコルに関する専門知識を取得しなければなりません。

XML は拡張性に優れているため、さまざまな業界間のデータ交換フォーマットを標準化するための非常に効果的なツールとなっています。たとえば、複数の業界間または一企業内の複数の部門間でメッセージ ブローカとワークフロー エンジンがトランザクションを調整しなければならない場合、XML を使用すると、異なるソースからのデータを組み合わせて、すべての当事者が理解できる 1 つのフォーマットを作成できます。

 


XSL と XSLT

Extensible Stylesheet Language(XSL)は、XML ドキュメントに適用する表示のルールを記述するための W3C の規格です。XSL には、変換言語(XLST)とフォーマット言語の両方が含まれます。この 2 つの言語は、互いに独立して機能します。XSLT は XML ベースの言語で、XML ドキュメントを別の XML ドキュメントに、または HTML、PDF、その他の文書フォーマットに変換する方法を記述するための W3C の仕様です。

XSLT トランスフォーマは、XML ドキュメントと XSLT ドキュメントを入力として受け付けます。XSLT ドキュメントに定義されるテンプレート ルールには、そのルールの適用先となる XML ツリーを指定するパターンが含まれています。XSLT トランスフォーマは、XML ドキュメントをスキャンしてルールに一致するパターンを見つけ出し、元の XML ドキュメントの該当するセクションにテンプレートを適用します。

 


DOM と SAX とは

DOM および SAX は、XML データ解析のための 2 つの Java アプリケーション プログラミング インタフェース(API)です。この 2 つの API は、解析に対して異なるアプローチをとっており、それぞれの API に長所と短所があります。

SAX

SAX は Simple API for XML の略語です。SAX は、イベントベースの XML 解析用インタフェースです。SAX は、パーサが要素の最初または最後などの XML ドキュメントを読み取る際に発生するイベントを定義します。プログラマは、ドキュメント解析時に異なるイベントを処理するハンドラを提供します。

XML ドキュメントを解析するために SAX API を使用するプログラマは、これらのイベントが発生したときに起こることを完全に制御する権限を持ち、解析プロセスをカスタマイズできます。たとえば、プログラマは、ドキュメントが不正であることを示すエラーがパーサで発生したときに、ドキュメントがすべて解析されるまで待つのではなく、すぐに XML ドキュメントの解析を中止できるので、パフォーマンスが向上します。

WebLogic Server の組み込みパーサ(Apache Xerces)は、SAX バージョン 2.0 をサポートしています。SAX バージョン 1.0 を使用して XML ドキュメントを解析するプログラムを作成した場合は、2 つのバージョンの相違点を把握し、それに従ってプログラムを更新する必要があります。2 つのバージョンの相違点については、http://www.megginson.com/SAX/Java/changes.html を参照してください。

DOM

DOM は Document Object Model の略語です。DOM は、XML ドキュメントをメモリに読み込んでツリー表示します。ツリーの各ノードは、元の XML ドキュメントからの特定のデータの一部を表します。ツリー構造は、データを表すための標準プログラミング メカニズムで、Java を使用したツリーのナビゲートおよび操作を簡単に素早く、かつ効率的に実行できます。しかし、主な欠点として、DOM でツリーを作成するために XML ドキュメント全体を読み取る必要があるため、XML ドキュメントのサイズが大きくなると、アプリケーションのパフォーマンスが低下するというものがあります。

WebLogic Server の組み込みパーサ(Apache Xerces)は、DOM Level 2.0 Core をサポートしています。DOM Level 1.0 を使用して XML ドキュメントを解析するプログラムを作成した場合は、2 つのバージョンの相違点を把握し、それに従ってプログラムを更新する必要があります。相違点の詳細については、http://www.w3.org/DOM/DOMTR を参照してください。

 


JAXP とは

前の節では、XML データの解析に使用できる API、SAX、DOM について説明しました。Java API for XML Processing(JAXP)では、これらのパーサにアクセスする手段を提供します。JAXP はまた、どのような仕様のパーサまたはトランスフォーマも使用できるプラグイン可能レイヤも定義します。

WebLogic Server では、XML アプリケーションの開発と、WebLogic Server で構築した XML アプリケーションを他の Web アプリケーション サーバに移植するのに必要な作業を容易にするために、Java API for XML Processing(JAXP)を実装しています。JAXP は、XML アプリケーションの移植性を高めるために Sun Microsystems で開発されました。JAXP では、Java プラットフォームの API の標準セットを介して XML ドキュメントを解析および変換するための基本機能がサポートされています。WebLogic Server 配布キット内の JAXP 1.1 は、組み込みパーサを使用するコンフィグレーションになっています。したがって、WebLogic Server で構築される XML アプリケーションでは、デフォルトで JAXP を使用します。

WebLogic Server 配布キットには、JAXP 1.1 で必要なインタフェースとクラスがあります。JAXP 1.1 には、SAX バージョン 2 および DOM Level 2 に対するサポートがあります。JAXP 用の Javadoc は、WebLogic Server のオンライン リファレンス マニュアルに含まれています。

JAXP パッケージ

JAXP には、以下の 2 つのパッケージがあります。

javax.xml.parsers パッケージには、SAX バージョン 2.0 および DOM Level 2.0 モードで XML データを解析するためのクラスがあります。XML ドキュメントを SAX モードで解析するには、まず newInstance() メソッドで新しい SaxParserFactory オブジェクトのインスタンスを作成します。このメソッドは、明確に定義された場所のリストを基に、ロードするパーサの特定の実装をルックアップします。次に、SaxParserFactory から SaxParser インスタンスを取得し、parse() メソッドを実行して、解析する XML ドキュメントにそれを渡します。XML ドキュメントを DOM モードで解析する場合も同様ですが、この場合は DocumentBuilder クラスと DocumentBuilderFactory クラスを使用します。

JAXP による XML ドキュメント解析の詳細については、 XML ドキュメントの解析を参照してください。

javax.xml.transform パッケージには、XML ドキュメント、DOM ツリー、または SAX イベントなどの XML データを別の形式に変換するクラスがあります。トランスフォーマ クラスも、パーサ クラスと同じように機能します。XML ドキュメントを変換するには、まず newInstance() メソッドで新しい TransformerFactory オブジェクトのインスタンスを作成します。このメソッドは、明確に定義された場所のリストを基に、ロードする XSLT トランスフォーマの特定の実装をルックアップします。次に、特定の XSLT スタイルシートを基に新しい Transformer オブジェクトのインスタンスを作成し、transform() メソッドを実行して、変換する XML オブジェクトにそれを渡します。XML オブジェクトは、XML ファイルでも DOM ツリーなどでもかまいません。

JAXP による XML オブジェクト変換の詳細については、 JAXP による XML データの変換を参照してください。

 


XML と XSLT の一般的な使い方

XML と XSLT をどのように使用するかは、ビジネス上のニーズによって異なります。

XML と XSLT を使用したコンテンツと表示の分離

XML と XSLT は、複数のクライアント タイプをサポートするアプリケーションでよく使用されます。たとえば、ブラウザ ベースのクライアントと Wireless Application Protocol (WAP)クライアントの両方をサポートする Web ベース アプリケーションを使用しているとします。これらのクライアントは、それぞれ HTML と Wireless Markup Language(WML)という異なるマーク付け言語を理解しますが、アプリケーションでは両方に適したコンテンツを提供しなければなりません。

これを実現するには、クライアントに送信するデータを表す XML ドキュメントを最初に作成するようにアプリケーションを記述します。次に、アプリケーションは、データを表す XML ドキュメントを、クライアントのブラウザ タイプによって HTML または WML に変換します。アプリケーションでは、HTTP リクエストの User-Agent リクエスト ヘッダを調べることによって、クライアントのブラウザ タイプを識別できます。クライアントのブラウザ タイプを認識すると、適切な XSLT スタイル シートを使用して、適切なマーク付け言語にドキュメントを変換します。このヘッダ情報へのアクセス方法の例については、WebLogic Server 配布キットの examples\servlets ディレクトリに収められている SnoopServlet サンプルを参照してください。

このように、クライアント タイプごとに異なるマーク付け言語を使用して同じ XML ドキュメントを表示する方法を用いると、複数のクライアント タイプのサポートに必要な努力を、適切な XSLT スタイル シートの開発に集中させることができます。さらに、必要な場合は、アプリケーションを他のクライアント タイプに簡単に適合させることができます。

XSLT の詳細については、 その他の情報源を参照してください。

企業間通信用メッセージ フォーマットとしての XML

企業間(B2B)環境で、企業 A と企業 B は両者間の電子商取引に関する情報の交換を望んでいます。企業 A は大手の電子商取引サイトです。企業 B は、企業 A の製品を最適な顧客集団に販売する小規模な子会社です。企業 B が企業 A に顧客情報を送ると、企業 B は企業 A から 2 通りの方法で対価を受け取ることができます。企業 B は、金銭、および企業 B が提供した顧客と同じ購買層の他の顧客に関する情報を企業 A から受け取ります。情報を交換するためには、企業 A と企業 B はマシンが理解でき、どちらの企業のシステムでも簡単に処理できるデータ フォーマットについて合意する必要があります。

XML は、このシナリオで使用する論理データ フォーマットですが、このフォーマットの選択はほんの第一歩に過ぎません。次に両企業は、交換する XML メッセージのフォーマットについて合意しなければなりません。企業 A はその子会社と 1 対多の関係にあるため、やり取りする XML メッセージのフォーマットは企業 A 側で定義する必要があります。

XML メッセージ、つまり XML ドキュメントのフォーマットを定義するために、企業 A は 2 種類の文書型定義(DTD)を作成します。1 つは企業 A が提供する顧客情報を記述するもので、もう 1 つは企業 A が受け取る新しい子会社の情報を記述するものです。企業 B も、2 種類の DTD を作成します。1 つは企業 A から受け取る XML ドキュメントを処理するためのもの、もう 1 つは企業 A 側で処理できるフォーマットで XML ドキュメントを作成するためのものです。

 


WebLogic Server XML の機能

WebLogic Server は、WebLogic Server と WebLogic Server に基づく XML アプリケーションに適用可能な XML テクノロジを統合します。WebLogic Server XML サブシステムを使用すると、顧客は、標準パーサ、WebLogic FastParser、XSLT トランスフォーマ、DTD、および XML スキーマを使用して XML ファイルを処理および変換できます。

WebLogic Server XML サブシステムには、以下の機能があります。

XML ドキュメント パーサ

WebLogic Server には、以下の 2 つのパーサがあります。

パーサ

説明

組み込み

組み込みパーサは、Apache Xerces パーサ バージョン 1.3.1 に基づいている。組み込みパーサは、Simple API For XML(SAX)モードまたは Document Object Model(DOM)モードのいずれかで使用できる。

WebLogic FastParser

WebLogic Web サービスに関連付けられた SOAP および WSDL ファイルなど、中小規模のドキュメントを処理するために特別に設計された高性能の XML パーサ。アプリケーションが中小規模(最大 10,000 要素)の XML ドキュメントを処理する場合、FastParser を使用するように WebLogic Server をコンフィグレーションする。

注意: WebLogic Server の旧バージョンには、カスタム パーサの作成機能がありました。カスタマイズされたパーサの対象となる XML ドキュメントのタイプに応じた WebLogic FastParser を使用できるので、WebLogic FastParser は、効果的にカスタマイズされたパーサ機能を置き換える。カスタマイズされたパーサの生成機能はなくなっている。

WebLogic FastParser の詳細については、 WebLogic FastParser の使用を参照。

Administration Console による XML レジストリのコンフィグレーションで、他の任意の XML パーサを使用できます。単一の WebLogic Server のインスタンスをコンフィグレーションすることによって、あるパーサを特定のアプリケーション用に使用し、別のパーサを異なるアプリケーション用に使用できます。

XML ドキュメント トランスフォーマ

WebLogic Server には、Apache Xalan XSLT トランスフォーマ バージョン 2.0.1 をベースとした組み込み XSLT トランスフォーマがあります。XML アプリケーションでは、この組み込み XSLT トランスフォーマまたは他の XSLT トランスフォーマを使用して、XML ドキュメントを変換できます。XML ドキュメントの詳細については、 JAXP による XML データの変換を参照してください。

JAXP プラグイン可能レイヤの実装

Java API for XML Processing(JAXP) 1.1 は、Java 標準で、パーサに依存しない XML 用 API です。JAXP の詳細については、 JAXP とはを参照してください。

注意: WebLogic Server は、JAXP 1.1 仕様で定義されているように、システム プロパティを使用するのではなく、Administration Console からアクセスする XML レジストリを使用して、パーサおよびトランスフォーマをプラグインします。

WebLogic サーブレット属性

WebLogic Server は、以下の特殊なサーブレット属性をサポートします。

ServletRequest オブジェクトで、前述の属性を付けて setAttribute メソッド(SAX 解析の場合)および getAttribute(DOM 解析の場合)メソッドを呼び出すと、任意の XML ドキュメントが解析されます。

以下のコード セクションでは、これらのメソッドの使い方の例を示します。

request.setAttribute("org.xml.sax.helpers.DefaultHandler", new DefHandler());

org.w3c.dom.Document = (Document)request.getAttribute("org.w3c.dom.Document");

注意: setAttribute メソッドと getAttribute メソッドは便利な機能として用意されているだけであり、サーブレットから XML を解析する際には必須というわけではありません。

WebLogic XSLT JSP タグ ライブラリ

JSP タグ ライブラリは、WebLogic Server で動作する JavaServer Pages(JSP)内から組み込み XSLT トランスフォーマにアクセスするための単純なタグを提供します。現時点では、このタグは組み込み XSLT トランスフォーマだけをサポートしています。このタグを使用して、XML ドキュメントを JSP 内から異なるトランスフォーマを使って変換することはできません。

JSP タブ ライブラリは、xmlx-tags.jar に収められています。このファイルは、WebLogic Server 配布キットのインストール時に自動的にインストールされます。

注意: JSP タグ ライブラリは便利な機能として用意されているだけであり、JSP 内から XSLT トランスフォーマへのアクセスに必要というわけではありません。

パーサおよびトランスフォーマのコンフィグレーション用 XML レジストリ

XML レジストリは、管理タスクとコンフィグレーション タスクを XML アプリケーションから切り離すことによって、これらのタスクを簡素化します。WebLogic Server のインスタンスに対するパーサおよびトランスフォーマのコンフィグレーションには、Administration Console (WebLogic Server 管理用のグラフィカル ユーザ インタフェース(GUI))を使用します。

注意: 各 WebLogic Server ドメインにはレジストリを好きなだけ組み込むことができ、ドメイン内の各 WebLogic Server にはゼロまたは 1 つのレジストリを割り当てることができます。

XML レジストリを使用すると

XML レジストリを使用すると、以下のタスクを行うことができます。

上記のすべての機能は、アプリケーションが WebLogic Server の本バージョンに付属の標準 Java API for XML Processing(JAXP)を使用する場合に利用できます。これらの機能は、サーバサイドだけで使用できます。

外部エンティティの解決のコンフィグレーション用 XML レジストリ

WebLogic XML では、XML レジストリを使用して外部エンティティを解決できます。外部エンティティの例が、XML ドキュメントの検証に使用する DTD ファイルです。この機能を使用するには、Administration Console を開き、XML レジストリで、外部エンティティに関連付ける パブリック ID または システム ID を入力します。

外部エンティティをローカルに格納することに加えて、URL などの HTTP インタフェースをサポートする外部レポジトリから外部エンティティを取得およびキャッシュするように WebLogic Server をコンフィグレーションできます。WebLogic Server のコンフィグレーションで、メモリやディスクにある外部エンティティをキャッシュし、有効期限が過ぎたと判断するまでエンティティをキャッシュ内にどの程度の期間とどめるかを指定できます。

XML レジストリを使用した外部エンティティの解決の詳細については、 外部エンティティのコンフィグレーション タスクを参照してください。

コード例

WebLogic Server には、XML ドキュメントの解析および変換のサンプルがあります。

XML ドキュメント変換のサンプルは、BEA_HOME\samples\examples\xml ディレクトリにあります。BEA_HOME は、WebLogic Server のメイン インストール ディレクトリです。

サンプルの構築方法と実行方法の詳細については、ブラウザで Web ページ BEA_HOME\samples\examples\xml\package-summary.html にアクセスしてください。

 


XML ファイルの編集

XML ファイルを編集するには、完全な Java ベースの XML スタンドアロン エディタである BEA XML エディタを使用します。この XML エディタは、XML ファイルを作成および編集するためのシンプルでユーザフレンドリなツールです。このツールでは、XML ファイルの中身を、階層的な XML ツリー構造と実際の XML コードの両方で表示します。ドキュメントを 2 通りに表示することにより、以下の 2 つの方法で XML ドキュメントを編集できます。

BEA XML エディタは、指定した DTD または XML スキーマを基に XML コードを検証します。

BEA XML エディタの使用方法の詳細については、オンライン ヘルプを参照してください。

BEA XML エディタは、 BEA dev2dev からダウンロードできます。

 


XML について学習するには

XML について学習するには、以下のオンラインコースおよびチュートリアルを参照してください。

 

back to top previous page next page