4DにはXML (eXtensible Markup Language) データを含むオブジェクトを解析するための一連のコマンドがあります。
プリエンプティブモードについての注記: プリエンプティブプロセスによって作成された XML 参照はそのプロセスにおいてのみ使用することができます。コオペラティブプロセスによって作成された XML 参照はすべてのコオペラティブプロセスによって使用することができますが、プリエンプティブプロセスによっては使用できません。
XMLランゲージはデータ交換の標準です。タグの使用に基づき、また交換されるデータや構造の明確な定義を可能にします。XMLファイルはテキストフォーマットファイルです。内容はアプリケーションにより読み込まれ、解析されます。多くのアプリケーションがいまやこのフォーマットをサポートしています。
XMLに関する詳細は例えば、http://xml.org や http://www.w3.org などのサイトを参照してください。
XMLサポートのために、4DはApache Foundationにより開発されたXerces.dllライブラリを使用しています。4DはXML version 1.0をサポートしています。
Note: 4Dは書き出し/読み込みエディタを使用したXMLフォーマットでのデータ読み込みと書き出しをサポートしています。
このテーマのコマンドはDOM接頭辞が付いています。4DはDOMとSAX接頭辞がつく2つのセットのXMLコマ ンドを提供しています。DOM (Document Object Model) と SAX (Simple API XML) はXML用の2つの異なる解析モデルです。
- DOMモードでは、XMLソースを解析してその構造 (ツリー) をメモリに構築します。このため、それぞれの要素へのアクセスはとても速く行えます。しかしツリー構造の全体がメモリに格納されるため、大きなXMLド キュメントの処理ではメモリ不足を招き、結果エラーが生成されるかもしれません。
- SAXモードでは、メモリにツリー構造を構築しません。この モードではソースの解析時に (要素の開始と終了のような) イベントが生成されます。このモードではどんなサイズのXMLドキュメントでも、利用可能なメモリ量にかかわらず解析することができます。SAXコマンド は"XML SAX"テーマにまとめられています。詳細はの節を参照してください。
XML標準に関する情報は以下のサイトをご覧ください:
http://www.saxproject.org/?selected=event と
http://www.w3schools.com/xml/
4DのDOMコマンドで作成、更新、または解析されるオブジェクトはテキスト、URL、ドキュメント、あるいはBLOBなどです。4DのXMLオブジェクトを開くために使用されるDOMコマンドはDOM Parse XML source と DOM Parse XML variableです。
その後、要素や属性を読み込み、解析、そして書き込むために多くのコマンドを使用できます。
エラーはXML GET ERROR コマンドを使用して復旧できます (両XML標準で共通です)。
DOM CLOSE XML コマンドを使用して最後にソースを閉じます。
XML BLOB引数の使用に関する注意: XML構造はテキスト型のデータに基づいているので、XMLを扱う際にはテキスト型のフィールドや変数の利用をお勧めします。過去の経緯により、(例えばDOM Parse XML variable等) 4DのXMLコマンドはBLOB型の引数を受け入れます。以前のバージョンの4Dではテキスト型の変数が32KBに制限されていました。4Dバージョン11より、テキストフィールドおよび変数は最大2GBまでのデータを含めることができます。以前の制限は取り払われたので、今後はBLOBをテキストに格納することは全くお勧めできません。BLOBの利用はバイナリデータの処理に予約されます。XML仕様に基づき、たとえBLOBにテキストが含まれている場合でも、4D v12からはバイナリデータを自動でBase64にエンコードします。
3つのXML DOMコマンド (DOM Create XML element, DOM Find XML element そして DOM SET XML ELEMENT VALUE) はXML要素にアクセスするためにXPath記法を受け入れます。
XPath記法はXPathランゲージ由来であり、XMLストラクチャ間をナビゲートする目的で使用されます。パス名タイプのシンタックスを使用して、XMLストラクチャ内で直接要素を指定できます。例えば以下の構造があるとき:
<RootElement>
<Elem1>
<Elem2>
<Elem3 Font=Verdana Size=10> </Elem3>
</Elem2>
</Elem1>
</RootElement>
XPath記法ではElem3に /RootElement/Elem1/Elem2/Elem3 シンタックスでアクセスできます。
4DではElement[ElementNum]シンタックスを使用した添字によるXPath要素へのアクセスも使用できます。例えば以下の構造があるとき:
<RootElement>
<Elem1>
<Elem2>aaa</Elem2>
<Elem2>bbb</Elem2>
<Elem2>ccc</Elem2>
</Elem1>
</RootElement>
XPath記法では /RootElement/Elem1/Elem2[3] シンタックスを使用して"ccc"値にアクセスできます。
XPath記法に関しては、DOM Create XML element と DOM Find XML element コマンドの例題を参照してください。
以下の文字セットが4DのXML DOMとXML SAXコマンドでサポートされています:
- ASCII
- UTF-8
- UTF-16 (ビッグ/スモールエンディアン)
- UCS4 (ビッグ/スモールエンディアン)
- EBCDIC コードページ IBM037, IBM1047, IBM1140 エンコーディング,
- ISO-8859-1 (または Latin1)
- Windows-1252.
XMLランゲージでは多くの特別な用語や略語が使用されます。ここでは4Dのコマンドで使用される主なXMLのコンセプトを説明します。
属性 (Attribute): 要素に付随するXMLのサブタグ。属性は常に名前と値を含みます (後述の図参照)。
子 (Child): XML構造において、ある要素の直接下のレベルにある要素。
DTD: Document Type Declaration。DTDはXMLが従わなくてはならない特定のルールとプロパティのセットを記述したものです。これらのルールは特にそれぞれのタ グの名前と内容、およびそのコンテキストを定義します。この要素の形式化を使用して、XMLドキュメントが妥当であるかを検証できます。
DTDはXMLドキュメントに含めることができますし (内部DTD)、あるいは分離したドキュメントに置くこともできます (外部DTD)。DTDは必須でないことに留意してください。
要素 (Element): XMLタグ。要素は常に名前と値を含みます。オプションで要素は属性を含みます (図参照)。
![](../../picture/39679/pict39679.en.png)
要素参照 (ElementRef): 4DのXMLコマンドで使用されるXML参照はXML構造を指定します。この参照は16進化されたコードです。お使いのシステムが32 bitか64 bitかによって、16文字また32文字長となります。XML参照を格納する変数はC_TEXTディレクティブを使用して宣言します。
親 (Parent): XML構造において、ある要素の直接上のレベルにある要素。
解析、パーサ (Parsing, parser): 利用可能な情報を取り出すために構造化されたオブジェクトを解析すること。"XML"テーマのコマンドを使用してXMLオブジェクトの解析を行います。
ルート (Root): XML構造の先頭レベルに位置する要素。
兄弟 (Sibling): XML構造中、ある要素と同じレベルにある要素。
XML構造 (XML Structure): 構造化されたXMLオブジェクト。ドキュメント、変数、あるいは要素がこのオブジェクトになりえます。
妥当 (Valid): パーサにより整形式かつDTD定義に準拠していると検証されたXML。整形式を参照。
整形式 (Well-formed): パーサにより一般的なXML仕様に準拠していると検証されたXML。妥当を参照。
XML: eXtensible Markup Language。データやその構造の転送を可能にする電子的なデータ交換の標準。XMLランゲージは、HTMLのようにタグや特定のシンタックスの使用 に基づきます。しかしXMLランゲージではカスタマイズされたタグの定義が可能です。
XSL: eXtensible Stylesheet Language。XMLドキュメントへの処理および内容の表示に使用するスタイルシートの定義を行うランゲージ。
このテーマ内のファンクションの多くはXML要素参照を返します。ファクションの実行中にエラー(例えば、ルート要素参照が無効)が発生した場合、OK変数に0が設定され、エラーが生成されます。
この場合、返される参照は連続したの"0"の文字列となります(32-bitでは16文字、64-bitでは32文字)。