XML Schema实体关系

时间:2013-06-18 16:57:49

标签: xml xsd

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

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

属性:

[Type1]: ID1 ,文字

[Type2]: ID2 ,文字

现在我想为该模型创建一个XML Schema。我已经创建了一个Schema,但我认为我没有正确的关系(1:M)和(0:N)。

有谁能解释我如何实现正确的关系?

这是我目前的XML Schema。

<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>

1 个答案:

答案 0 :(得分:0)

您的实体模型是多对多关系,但XML文档本质上是一个层次结构。您可以使用XML层次结构建模一对多关系中的一个,使用主键/外键建模另一个关系,或者您可以使用主键和外键对这两种关系进行建模 - 这是您显然正在尝试做的事情。

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