0

我想从 ER 模型创建一个新的 XML 模式。我有以下模型。

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

属性:

[类型1]:ID1,文本

[类型2]: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 层次结构对一对多关系之一建模,另一个使用主键/外键建模,或者您可以使用主键和外键对这两种关系建模——这显然是您想要做的。

您做错的是将键和 keyrefs 定义在错误的级别:它们都需要在容器级别(XMLModel)。如果要说 T 中的每个 R 对 F 都有唯一的值,那么需要在 R 的级别定义 key,选择器应该从 T 中选择 R,字段应该从 R 中选择 F。

于 2013-06-18T22:19:13.250 回答