XML ノードとデータパケット項目の間のマッピング
データベース アプリケーションでの XML の利用:インデックス への移動
XML では,構造化されたデータをテキストベースで格納または記述しています。データセットは,構造化されたデータを格納または記述するもう 1 つの手段です。したがって,XML ドキュメントをデータセットに変換するには,XML ドキュメント内のノードとデータセット内の項目との対応関係を指定する必要があります。
たとえば,一組の電子メールメッセージを表す XML ドキュメントを考えましょう。これは次のように,記述できます(単一メッセージを含む)。
<?xml version="1.0" standalone="yes" ?>
<email>
<head>
<from>
<name>Dave Boss</name>
<address>dboss@MyCo.com</address>
</from>
<to>
<name>Joe Engineer</name>
<address>jengineer@MyCo.com</address>
</to>
<cc>
<name>Robin Smith/name>
<address>rsmith@MyCo.com</address>
</cc>
<cc>
<name>Leonard Devon</name>
<address>ldevon@MyCo.com</address>
</cc>
</head>
<body>
<subject>XML components</subject>
<content>
Joe,
Attached is the specification for the XML component support in Delphi.
This looks like a good solution to our buisness-to-buisness application!
Also attached, please find the project schedule. Do you think its reasonable?
Dave.
</content>
<attachment attachfile="XMLSpec.txt"/>
<attachment attachfile="Schedule.txt"/>
</body>
</email>
このドキュメントとデータセットとの間の 1 つの自然なマッピングにより,それぞれの電子メールメッセージが単一のレコードにマッピングされます。レコードには,送信側の名前とアドレス用の項目があります。電子メールメッセージの受信者は複数あってよいため,受信者(<to>)は,ネストされたデータセットにマッピングされます。同様に,cc のリストはネストされたデータセットにマッピングされます。件名行は,文字列項目にマッピングされますが,メッセージ自体(<content>)はおそらくメモ型項目になるでしょう。添付ファイルの名前は,ネストされたデータセットにマッピングされますが,それは,1 つのメッセージに複数の添付ファイルを付けることができるからです。そのため,上の電子メールは次のようなデータセットにマッピングされます。
SenderName | SenderAddress | To(宛先) | CC(カーボンコピー) | Subject(件名) | Content(内容) | Attach(添付ファイル) |
---|---|---|---|---|---|---|
Dave Boss |
(DataSet) |
(DataSet) |
XML コンポーネント |
(メモ型) |
(DataSet) |
「To」項目内にネストされたデータセットは次のとおりです。
名前 | アドレス |
---|---|
Joe Engineer |
「CC」項目内にネストされたデータセットは次のとおりです。
名前 | アドレス |
---|---|
Robin Smith |
|
Leonard Devon |
「Attach」項目内にネストされたデータセットは次のとおりです。
添付ファイル |
---|
XMLSpec.txt |
Schedule.txt |
このようなマッピングを定義するには,繰り返し可能な XML ドキュメントのノードを識別し,それらのノードをネストされているデータセットにマッピングする必要があります。値を持ち,一度しか出現しないタグ付き要素(<content>...</content> など)は,値としてみなせるデータの型を反映するデータタイプの項目にマッピングされます。タグの属性(添付タグの AttachFile 属性など)も項目にマッピングされます。
XML ドキュメント内のすべてのタグが対応するデータセット内に記述されているわけではないことに注意してください。たとえば,<head>...<head/> 要素は,得られるデータセット内に対応する要素がありません。通常,値を持つ要素のみ,繰り返せる要素,またはタグの属性がデータセットの項目(ネストされたデータセット項目を含む)にマッピングされます。この規則の例外は,XML ドキュメント内の親ノードが子ノードの値から構築される値が入っている項目にマッピングされる場合です。たとえば,XML ドキュメントに次のような一組のタグが含まれているとします。
<FullName>
<Title> Mr. </Title>
<FirstName> John </FirstName>
<LastName> Smith </LastName>
</FullName>
これは,次の値を持つ単一のデータセット項目にマッピングできます。
Mr. John Smith