7 XMLデータ・ファイルを処理するためのEDQの構成
この章の内容は次のとおりです。
スナップショットのXMLデータ・ファイルを使用して、ファイルに含まれるデータの読取りと書込みを行うことができます。スナップショットは、1つ以上のプロセスで使用されるデータ・ストア内のデータのステージング済コピーです。XMLデータ・ファイルを使用するために、2種類のデータ・ストア(単純なXMLおよびXMLとスタイルシート)が用意されています。両方とも、サーバー側とクライアント側のデータ・ストアで使用できます。
単純なXMLデータ・ストアの使用
単純なXMLデータ・ストアでは、単純な2レベル構造のXMLファイル(最上位レベルのタグがエンティティを表し、下位レベルのタグがそのエンティティの属性を表す構造)の読取りと書込みを行うことができます。Microsoft AccessからエクスポートされたXMLファイルがその一例です。
次に、使用できる単純なXMLファイル形式の例を示します。
<dataroot> <Person> <Id>1</Id> <FirstName>Fred</FirstName> <LastName>Bloggs</LastName> <DateOfBirth>1972-01-31T00:00:00.000+0000</DateOfBirth> <Weight>85</Weight> </Person> <Person> <Id>2</Id> <FirstName>Jane</FirstName> <LastName>Smith</LastName> <DateOfBirth>1985-07-16T00:00:00.000+0100</DateOfBirth> <Weight>63</Weight> </Person> </dataroot>
単純なXMLファイルの読取り
単純なXMLファイルを読み取る場合、次のように動作します。
-
ルート要素名は使用されないため、任意に指定できます。
-
レコード要素名は、スナップショット・ウィザードのダイアログの「表選択」ページに表名として表示されます。
-
下位レベルの要素名は、スナップショット・ウィザードの「列選択」ページに列名として表示されます(そのため、EDQ属性名になります)。
単純なXMLファイルの書込み
データ・ストアに対するエクスポートを使用して単純なXMLファイルを生成すると、データ・ストアの名前によりレコードXML要素名が定義されます。「単純なXMLデータ・ストアの使用」の例にあるPerson
要素は、このXMLでの表示方法を示しています。
下位レベルのタグのXML要素名は、属性名から取得されます。EDQ名は、無効なXMLが生成されないようにエンコードされます。たとえば、名前に含まれる空白文字は、文字列_x0020_
で置き換えられるため、Date Of Birth
という名前の属性では次の形式のXML要素が生成されます。
<Date_x0020_Of_x0020_Birth>
XMLおよびスタイルシート・データ・ストアの使用
単純なXMLとは異なる構造のXMLを処理する必要がある場合、XMLおよびスタイルシート・データ・ストアを使用します。
これらのデータ・ストアでは、DN-XMLスキーマに準拠するXMLの読取りと書込みを行いますが、オプションで、カスタム・スタイルシートを使用して次のことを実行できます。
-
データ・スナップショット時におけるカスタムXML形式からDN-XMLへのXMLの変換
-
データ・エクスポート時におけるDN-XMLからカスタムXML形式へのXMLの変換
XMLスタイルシートの詳細は、http://www.w3.org/Style/XSL/
およびhttp://www.w3.org/standards/xml
にあるW3CのWebサイトを参照してください。
DN-XMLの使用
DN-XMLは、カスタムXMLを処理する場合に使用する形式です。
DN-XMLの例は次のとおりです。
<dn:data xmlns:dn="http://www.datanomic.com/2008/dnx"> <dn:record skip="true"> <dn:value name="Id" type="string"/> <dn:value name="FirstName" type="string"/> <dn:value name="LastName" type="string"/> <dn:value name="DateOfBirth" type="date"/> <dn:value name="Height" type="number"/> <dn:value name="Weight" type="number"/> </dn:record> <dn:record> <dn:value name="Id">1</dn:value> <dn:value name="FirstName">Fred</dn:value> <dn:value name="LastName">Bloggs</dn:value> <dn:value name="DateOfBirth">1972-01-31</dn:value> <dn:value name="Height">1.85</dn:value> <dn:value name="Weight">85</dn:value> </dn:record> <dn:record> <dn:value name="Id">2</dn:value> <dn:value name="FirstName">Jane</dn:value> <dn:value name="LastName">Smith</dn:value> <dn:value name="DateOfBirth">1985-07-16</dn:value> <dn:value name="Height">1.65</dn:value> <dn:value name="Weight">63</dn:value> </dn:record> </dn:data>
これは、「単純なXMLデータ・ストアの使用」の例に対応する同等のDN-XMLです。
DN-XMLでは、属性名が単純なXMLとは異なる方法で定義されていることに注意してください。DN-XMLでは、属性のコンテンツを使用して属性名を指定するため、名前に空白などの特殊文字を含む属性を作成することが可能です。
前の例では、<dn:record skip="true">
XML要素とその内容によって、フィールド名とそのデータ型を含むソースの構造を定義しています。他のすべてのレコード要素は、データの行を定義しています。これは、カンマ区切りの値ファイルにおけるヘッダー行に似ています。使用できるデータ型は次のとおりです。
-
文字列
-
日付
-
数値
注意:
DN-XMLファイルの日付値は、XSD日付書式(ISO 8601)で指定する必要があります。たとえば、'2008-10-31T15:07:38.6875000-05:00'とするか、時間の構成要素なしで単に'2008-10-31'とします。
データ・レコード内で、値要素はレコードの属性値を指定するために使用されます。名前属性は、問題の属性を指定するために使用し、属性のテキスト・コンテンツでその属性の値を指定します。たとえば、XMLフラグメントの<dn:value name="FirstName">Fred</dn:value>
では、値'Fred'は属性の'FirstName'に割り当てられます。
DN-XMLファイルを読み取るには、XMLおよびスタイルシート・データ・ストアを作成して、XMLソース・ファイルの場所を指定します。ここで、「XSLTファイル」オプションは空白のままにします。
同様に、DN-XMLファイルを書き込むには、「XSLTファイル」オプションを空白のままにして、データをXMLおよびスタイルシート・データ・ストアにエクスポートします。
カスタムXMLファイルの読取り
カスタム形式のXMLファイルを読み取るには、カスタムXMLスタイルシート(XSLT)を使用するように構成されたXMLおよびスタイルシート・データ・ストアを使用し、データのスナップショット取得時にカスタム・スキーマからDN-XMLスキーマに変換します。
次に、読み取ることができるカスタムXMLファイルの例を示します。
<crmdata> <contacts> <contact id="1"> <name> <firstname>Fred</firstname> <surname>Bloggs</surname> </name> <dob>1972-01-31</dob> <properties> <property name="height" value="1.85"/> <property name="weight" value="85"/> </properties> </contact> <contact id="2"> <name> <firstname>Jane</firstname> <surname>Smith</surname> </name> <dob>1985-07-16</dob> <properties> <property name="height" value="1.68"/> <property name="weight" value="63"/> </properties> </contact> <contacts> </crmdata>
次のXMLスタイルシートは、前述の例のカスタムXMLを適切なDN-XML形式に変換する1つの方法を示しています。
<xsl:stylesheet version="1.0" xmlns:dn="http://www.datanomic.com/2008/dnx" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fn="http://www.w3.org/2005/02/xpath-functions"> <xsl:output method="xml"/> <xsl:template match="/"> <dn:data> <!-- Write out the header record --> <dn:record skip="true"> <dn:value name="Id" type="string"/> <dn:value name="FirstName" type="string"/> <dn:value name="LastName" type="string"/> <dn:value name="DateOfBirth" type="date"/> <dn:value name="Height" type="number"/> <dn:value name="Weight" type="number"/> </dn:record> <!-- Get each contact record --> <xsl:apply-templates select="/crmdata/contacts/contact"/> </dn:data> </xsl:template> <xsl:template match="contact"> <!-- Write out a data record --> <dn:record> <dn:value name="Id"><xsl:value-of select="@id"/></dn:value> <dn:value name="FirstName"><xsl:value-of select="name/firstname"/></dn:value> <dn:value name="LastName"><xsl:value-of select="name/surname"/></dn:value> <dn:value name="DateOfBirth"><xsl:value-of select="dob"/></dn:value> <dn:value name="Height"> <xsl:value-of select="properties/property[@name='height']/@value"/> </dn:value> <dn:value name="Weight"> <xsl:value-of select="properties/property[@name='weight']/@value"/> </dn:value> </dn:record> </xsl:template> </xsl:stylesheet>
カスタムXMLファイルの書込み
カスタム形式のXMLファイルを書き込むには、カスタムXSLTを使用するように構成されたXMLおよびスタイルシート・データ・ストアを使用して、データ・エクスポート時にDN-XMLスキーマからカスタム・ターゲット・スキーマに変換します。
次に、生成する必要のあるターゲットのカスタムXML形式の例を示します。
<Report> <Person Id="1" FullName="Fred Bloggs"/> <Person Id="2" FullName="Jane Smith"/> </Report>
次のXMLスタイルシートは、DN-XML形式をターゲットのカスタムXML形式に変換する1つの方法を示しています。
<xsl:stylesheet version="1.0" xmlns:dn="http://www.datanomic.com/2008/dnx" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fn="http://www.w3.org/2005/02/xpath-functions"> <xsl:output method="xml"/> <xsl:template match="/"> <Report> <xsl:apply-templates select="/dn:data/dn:record"/> </Report> </xsl:template> <xsl:template match="dn:record"> <Person> <xsl:attribute name="Id"> <xsl:value-of select="dn:value[@name = 'Id']"/> </xsl:attribute> <xsl:attribute name="FullName"> <xsl:value-of select="dn:value[@name = 'FirstName']"/> <xsl:text> </xsl:text> <xsl:value-of select="dn:value[@name = 'LastName']"/> </xsl:attribute> </Person> </xsl:template> </xsl:stylesheet>