7 XMLデータ・ファイルを処理するためのEDQの構成

この章では、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>
データ・ストアの構成

EDQでデータを読み取るには、XMLおよびスタイルシート・データ・ストアを作成して、XMLソース・ファイルおよびXSLTファイル(スタイルシート)の場所を指定します。

この図は、XMLソース・ファイルおよびそのXSLTファイル(スタイルシート)の場所を指定する方法の画面キャプチャです。

EDQは、レコード境界でファイルを分割し、チャンク単位で効率的にソースXMLファイルを読み取ります。デフォルトで、EDQは、レコード要素としてルートの直下にある要素を使用します。ソースXMLファイルでこれを適用できない場合、ルートからレコード要素に対するXPath-style式を指定する必要があります。

カスタム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>
データ・ストアの構成

EDQでデータを書き込むには、XMLおよびスタイルシート・データ・ストアを作成して、カスタムXMLファイルおよびXSLT (スタイルシート)ファイルの宛先を指定します。

この図は、XMLソース・ファイルおよびそのXSLTファイル(スタイルシート)の場所を指定する方法の画面キャプチャです。