XML の概要
Extensible Markup Language(XML)は、構造化されたデータをテキストで記述する方法です。XML が Web サービスで果たす主な役割として、開発者にとって最も身近なものは、Web サービスが送信および受信するメッセージの形式を提供することです。Web サービスでは、メソッドの呼び出しを受信し、値を返し、XML メッセージとして通知を送信します。たとえば、サービスのテストやデバッグを行う場合は、サービスが受信しそうなサンプルのメッセージを表す XML ドキュメントを作成し、そのドキュメントをサービスに渡して、結果を参照します。
XML の標準については、W3C の Web サイトで Extensible Markup Language (XML) 1.0 (Second Edition) を参照してください。W3C では、XML の詳細情報の便利なリンク集(Extensible Markup Language (XML))も用意しています。
注意 : WebLogic Server では Java データと XML メッセージ間のデータ変換処理も行いますが、XML マップを活用すると、これらのメッセージをより強力に制御してサービス内で使用できます。XML マッピングの詳細については、XML マップを使用する理由を参照してください。
XML ドキュメントのサンプルを見てみましょう。データベースから社員情報を返す Web サービスを記述していると想定してください。サービスに送信された氏名の値に基づいて、コードでは社員データベースを検索し、一致した問い合わせ情報を返します。以下の例は、サービスによって返される XML です。XML が未経験の方でも、この例で XML の構造がわかるでしょう。
<!-- Information about the employee record(s) returned from search. --> <employees> <employee> <id ssn="123-45-6789"/> <name> <first_name>Gladys</first_name> <last_name>Cravits</last_name> </name> <title>Busybody</title> <address location="home"> <street>1313 Mockingbird Lane</street> <city>Anytown</city> <state>IL</state> <zip>12345</zip> </address> </employee> </employees>
XML では、< と > の記号でまとめられたテキストは要素と呼ばれます。この例では、<employees> と </employees>、<name> と </name> のようなタグで要素が区切られています。この例のほとんどの要素には、開始タグ(< で始まる)と終了タグ(</ で始まる)があることに注意してください。<id> 要素には内容がないため、/> 記号で終了しています。XML の規則では、開始タグと終了タグで表現した <id ssn="123-45-6789"></id> のような空要素も認められています。
すべての XML ドキュメントには、親要素を持たず、他の要素が含まれるルート要素があります。この例では、<employees> 要素がルートです。通常、ルート要素の名前はドキュメントの内容に基づいています。たとえば、サービスが住所(
他の要素を持つ要素は親要素と呼ばれ、親要素が含む要素は子要素と呼ばれます。この例では、<employees>、<employee>、<name>、および <address> が親要素です。それらに含まれている
注意 : この例では階層関係を強調するためにインデントを使用していますが、インデントは必須ではありません。
属性とは、要素に付加されている名前/値のペア(開始タグ内に含まれる)で、要素について記述するためのものです。この例の <id> 要素には ssn 属性があり、その値は 123-45-6789 です。
XML の内容は、要素タグの間のテキストです。内容と属性値は、XML ドキュメントで記述されるデータを表現します。要素は空にすることもできます。上記の例では、「Gladys」が <first_name> 要素の内容(または値)です。
HTML や Java、その他の言語と同じように、XML にもコメントを付加できます。XML では、コメントは <!-- と --> の記号(HTML で使用される記号と同じ)で囲まれます。上記の例の最初の行はコメントです。
XML のネームスペースは、タグ名がユニークである範囲を定義します。XML の用途の広がりやテキストベースという性質上、さまざまな意味を持つ複数の要素名が同じドキュメント内に登場することが多いため、このことは重要になります。たとえば、XML マップではネームスペースとプレフィックスが使用されます。プレフィックスによって、マッピングに必要なタグと、マップされるメソッドの XML メッセージに関連付けられたタグが識別されます。
XML の経験を積むにつれて、スキーマに触れる機会があります。スキーマは必須ではありませんが、特定の目的で使用される XML ドキュメントの内容を定義する際に有用です。XML では構文と構造の基本的な規則を定義しますが、スキーマでは XML ドキュメントの構造と内容に関するより詳細な規則を定義します。スキーマでは、ドキュメントに含まれる要素と属性、他の要素の子になる要素、子要素の順番などを指定できます。XML ドキュメントが XML の一般的な規則に従っている場合は整形式と呼ばれ、スキーマの特殊な規則に従っている場合は有効と呼ばれます。
以下のサンプルの XML ドキュメントでは、オレンジとリンゴの注文を記述しています。このドキュメントをその次のドキュメントと比べてみましょう。
<?xml version="1.0"?> <produceOrder> <item> <name>Oranges</name> <amount>4</amount> <price>2.0</price> </item> <item> <name>Apples</name> <amount>12</amount> <price>3.6</price> </item> </produceOrder>
以下のスキーマは、製品の注文に関する記述の階層だけでなく、各要素で許可されるデータ型も規定するように設計されています。XML スキーマでは XML の構文を使用するため、外見はスキーマが適用されるドキュメントと似ています。
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="produceOrder" type="item"/> <xs:complexType name="item"> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="amount" type="xs:integer"/> <xs:element name="price" type="xs:decimal"/> </xs:sequence> </xs:complexType>
この簡単な例では、<name>、<amount>、および <price> 要素が <item> 要素の子であるという階層と、要素の順番を指定しています。
xs プレフィックスは、タグ名がユニークかどうかを評価するためのネームスペースを指定しています。ネームスペースの宣言は xmlns(XML napespase の略) で始まり、xs プレフィックスを http://www.w3.org/2001/XMLSchema という URI(Uniform Resource Identifier)にマップしています。実際には、URI の反対側について特殊な決まりはありませんが、URI はユニークなパスである必要があります。
xs プレフィックスは、型属性の値にも特定の意味を持たせています。この例の、値に xs プレフィックスを持つ型 は「単純型」と呼ばれ、W3C XML Schema 仕様で定義されています。さらに、このスキーマでは item という複合型を定義しています。このスキーマによると、item という型は特定の順序で並ぶ 3 つの XML 要素で構成されます。
スキーマを使用すると、Web サービスで受信または送信されるメッセージを検証できます。検証する場合は、使用するスキーマを指定するためのカスタム Javadoc タグで、サービス メソッドの実装にマーキングすることができます。詳細については、@jws:parameter-xml タグ または @jws:return-xml タグを参照してください。