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>