0

ER モデルから新しい XML スキーマを作成したいと考えています。私は次のモデルを持っています。

[Type1]--(1:M)--->(doSomething)<---(0:N)--[Type2]

属性:

[Type1]: ID1 , テキスト

[Type2]: ID2 , テキスト

次に、そのモデルの XML スキーマを作成したいと思います。私はすでにスキーマを作成していますが、正しい関係 (1:M) と (0:N) を持っていないと思います。

正しい関係を実装する方法を誰かに説明してもらえますか?

これが現在の XML スキーマです。

<xs:element name="XMLModel">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="MyType1" type="type1" maxOccurs="unbounded">
                <xs:key name="MyType1_ID">
                    <xs:selector xpath="MyType1"/>
                    <xs:field xpath="ID1"/>
                </xs:key>
            </xs:element>
            <xs:element name="MyType2" type="type2" maxOccurs="unbounded">
                <xs:key name="MyType2_ID">
                    <xs:selector xpath="MyType2"/>
                    <xs:field xpath="ID2"/>
                </xs:key>
            </xs:element>
            <xs:element name="DoSomething" type="typeDo" maxOccurs="unbounded">
                    <xs:keyref name="Ref1" refer="MyType1_ID">
                        <xs:selector xpath="DoSomething"/>
                        <xs:field xpath="child::MyType1"/>
                    </xs:keyref>
                    <xs:keyref name="Ref2" refer="MyType2_ID">
                        <xs:selector xpath="DoSomething"/>
                        <xs:field xpath="child::MyType2"/>
                    </xs:keyref>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>
<xs:complexType name="type1">
<xs:sequence>
    <xs:element name="Text" type="xs:string"/>
    <xs:element name="ID1" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="type2">
<xs:sequence>
    <xs:element name="Text" type="xs:string"/>
    <xs:element name="ID2" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="typeDo">
<xs:all>
    <xs:element name="MyType1" type="xs:integer"/>
    <xs:element name="MyType2" type="xs:integer"/>
</xs:all>
</xs:complexType>
4

1 に答える 1

0

エンティティ モデルは多対多の関係ですが、XML ドキュメントは本質的に階層です。XML階層を使用して1対多の関係の1つをモデル化し、主キー/外部キーを使用してもう1つをモデル化するか、主キーと外部キーを使用して両方の関係をモデル化できます-これは明らかにあなたがやろうとしていることです.

あなたが間違ったことは、キーとキー参照を間違ったレベルで定義したことです。それらはすべてコンテナ レベル (XMLModel) である必要があります。T のすべての R が F に対して一意の値を持っていると言いたい場合は、R のレベルでキーを定義する必要があり、セレクターは T から R を選択し、フィールドは R から F を選択する必要があります。

于 2013-06-18T22:19:13.250 に答える