7 XMLデータ・ファイルを処理するためのEDQの構成
この章の内容は次のとおりです。
スナップショットのXMLデータ・ファイルを使用して、ファイルに含まれるデータの読取りと書込みを行うことができます。スナップショットは、データ・ストアにステージングされたデータのコピーで、1つ以上のプロセスで使用されます。EDQでは、XMLデータ・ファイルを処理するために、単純なXMLと、XMLおよびスタイルシートという2つのタイプのデータ・ストアを提供しています。両方とも、サーバー側とクライアント側のデータ・ストアで使用できます。
単純なXMLデータ・ストアの使用
単純なXMLデータ・ストアでは、単純な2レベル構造のXMLファイル(最上位レベルのタグがエンティティを表し、下位レベルのタグがそのエンティティの属性を表す構造)の読取りと書込みを行うことができます。Microsoft AccessからエクスポートされたXMLファイルがその一例です。
次に、EDQで使用できる単純な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ファイルの読取り
EDQで単純なXMLファイルを読み取る場合、次のように動作します。
-
ルート要素名は使用されないため、任意に指定できます。
-
レコード要素名は、スナップショット・ウィザードのダイアログの「表選択」ページに表名として表示されます。
-
下位レベルの要素名は、スナップショット・ウィザードの「列選択」ページに列名として表示されます(そのため、EDQ属性名になります)。
単純なXMLファイルの書込み
データ・ストアに対するEDQエクスポートを使用して単純なXMLファイルを生成すると、データ・ストアの名前でレコードXML要素名が定義されます。「単純なXMLデータ・ストアの使用」の例にあるPerson要素は、このXMLでの表示方法を示しています。
下位レベルのタグのXML要素名は、EDQ属性名から取得されます。EDQ名は、無効なXMLが生成されないようにエンコードされます。たとえば、名前に含まれる空白文字は、文字列_x0020_で置き換えられるため、Date Of BirthというEDQ属性により、次の形式の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は、EDQでカスタム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では、EDQ属性名が単純なXMLとは異なる方法で定義されていることに注意してください。DN-XMLでは、属性の内容を使用してEDQ属性名を指定するため、名前に空白などの特殊文字を含むEDQ属性を作成することが可能です。
前の例では、<dn:record skip="true"> XML要素とその内容によって、フィールド名とそのデータ型を含むソースの構造を定義しています。他のすべてのレコード要素では、EDQのデータの行を定義しています。これは、カンマ区切りの値ファイルにおけるヘッダー行に似ています。使用できるデータ型は次のとおりです。
-
文字列
-
日付
-
数値
注意:
DN-XMLファイルの日付値は、XSD日付書式(ISO 8601)で指定する必要があります。たとえば、'2008-10-31T15:07:38.6875000-05:00'とするか、時間の構成要素なしで単に'2008-10-31'とします。
データ・レコード内で、値要素はレコードのEDQ属性値を指定するために使用します。名前属性は、問題のEDQ属性を指定するために使用し、属性のテキスト・コンテンツでそのEDQ属性の値を指定します。たとえば、XMLフラグメントの<dn:value name="FirstName">Fred</dn:value>は、値'Fred'をEDQ属性の'FirstName'に割り当てます。
EDQでDN-XMLファイルを読み取るには、XMLおよびスタイルシート・データ・ストアを作成して、XMLソース・ファイルの場所を指定します(「XSLTファイル」オプションは空白のままにします)。
同様に、EDQでDN-XMLファイルを書き込むには、XSLTオプションを空白のままにして、データをXMLおよびスタイルシート・データ・ストアにエクスポートします。
カスタムXMLファイルの読取り
カスタムXMLスタイルシート(XSLT)を使用してデータ・スナップショット時にカスタム・スキーマからDN-XMLスキーマに変換するように構成されたXMLおよびスタイルシート・データ・ストアを使用して、カスタム形式のXMLファイルをEDQで読み取ることができます。
次に、EDQで読み取ることができるカスタム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ファイルの書込み
カスタムXSLTを使用してデータ・エクスポート時にDN-XMLスキーマからカスタム・ターゲット・スキーマに変換するように構成されたXMLおよびスタイルシート・データ・ストアを使用して、カスタム形式のXMLファイルをEDQで書き込むことができます。
次に、EDQで生成する必要のあるターゲットのカスタム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>





