0

従業員と情報でいっぱいの巨大な XML ファイルがあり、質問があります。

XML ファイルの例:

<Employees>
  <Employee>
    <EmployeeID>blah</EmployeeID>
    <FirstName>blah</FirstName>
    <LastName>blah</LastName>
    <MiddleName>blah</MiddleName>
    .......... and on
  </Employee>
    ........ and on
</Employees>

私のスキーマは、これまでのところ次のようになっています。

<?xml version="1.0" encoding="utf-8"?>

<xsd:element name="Employees" sql:relation="The_Employees">
    <xsd:complexType>
        <xsd:sequence>
            <xsd:element name="Employee">
                <xsd:element name="EmployeeID" sql:field="EmpNo" type="xsd:integer"/>
                <xsd:element name="FirstName" sql:field="FirstName">
                    <xsd:simpleType>
                        <xsd:restriction base="xsd:string">
                            <xsd:whiteSpace value="collapse"/>
                        </xsd:restriction>
                    </xsd:simpleType>
                </xsd:element>
               .......... and on
            </xsd:element>
        </xsd:sequence> 
    </xsd:complexType>
</xsd:element>

私の調査によると、ルート要素にはDB内のテーブルとの関係が含まれているはずです(プライバシーのために、この例の名前は「The_Employees」です)。そのため、その関係を作成し、それぞれのsql:fieldも作成しましたほとんどの場合、列名は XML 要素タグとは異なるためです。しかし、個々の<Employee>タグをテーブルに関連付けるにはどうすればよいでしょうか? また、XML の検証中に、次のエラーがスローされます。

'Employee' の内容は (annotation?, (simpleType | complexType)?, (unique | key | keyref)*)) と一致する必要があります。要素から始まる問題が見つかりました。

バリデーターは、コンテンツを 2 つの別々のテーブルに分割しようとしていると考えているようで、注釈を付ける必要がありますが、そうではありません。助言がありますか?

参考までに: ここでの最終製品は、SQLXMLBulkLoad を使用して XML ファイルから新しい SQL テーブルにデータをロードする VB.NET プログラムになります。

4

1 に答える 1

0

わかりました...修正は簡単でした。将来誰かが参照できるように、これに答えています。ルート要素とそのルート要素の下に個々の親要素があり、BulkLoad を使用している場合は、ルート要素を sql:is-constant = 1 に設定できます。これにより、ルート要素が存在することがスキーマに伝えられますが、それを無視します。また、上記のスキーマは次のように修正されました。

<xsd:element name="Employees" sql:is-constant=1>
<xsd:complexType>
    <xsd:sequence>
        <xsd:element name="Employee" sql:relation="The_Employees">
          <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="EmployeeID" sql:field="EmpNo" type="xsd:integer"/>
            <xsd:element name="FirstName" sql:field="FirstName">
                <xsd:simpleType>
                    <xsd:restriction base="xsd:string">
                        <xsd:whiteSpace value="collapse"/>
                    </xsd:restriction>
                </xsd:simpleType>
            </xsd:element>
           .......... and on
          </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
    </xsd:sequence> 
</xsd:complexType>

于 2012-07-19T16:31:13.337 に答える