XML Schema相同的属性名称,但不同的特定属性值集?

时间:2015-02-18 13:40:40

标签: xsd attributes

我希望创建一个具有两个属性的重复相同的命名元素,每个属性的值彼此相关联。即。

<anElement id="R1" description="Some definition for R1"/>  
<anElement id="R2" description="Some definition for R2"/>

理想情况下,我会定义&#34;群组&#34;将id和description属性放在一起,并为anElement元素的每个实例引用其中一个组。

<complexType name="RElements">
    <choice>
        <element name="anElement" type="R1Group"/>
        <element name="anElement" type="R2Group"/>
    </choice>
</complexType>
<complexType name="RElementsType">
    <sequence>
        <element ref="RElements" minOccurs="1" maxOccurs="unbounded"/>
    </sequence>
</complexType>

但是Choice不允许使用相同元素名称的倍数。我看到有关如何使用相同名称的多个元素但没有允许其他属性的讨论,更不用说具有相互关联的属性了。我可以接近的唯一方法是根据id使用不同的命名元素。即

<R1 id="R1" description="Some definition for R1"/>  
<R2 id="R2" description="Some definition for R2"/>

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您需要提供更多信息。

基本上为了实现XML,你提供了一个像这样的简单模式就足够了。

enter image description here

<?xml version="1.0" encoding="utf-8" ?>
<!--Created with Liquid XML 2015 Developer Bundle Edition 13.0.3.5737 (http://www.liquid-technologies.com)-->
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="RootElement">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="anElement" minOccurs="0" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:attribute name="id" type="xs:string" />
                        <xs:attribute name="descritpion" type="xs:string" />
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

但是,您提到属性值id和描述已链接,您可以约束这些,但您需要提供更多信息。另外,我不确定你为什么选择这个?很难看出你尝试给你的东西只提供了模式的片段


要包含后面的注释中描述的约束,以下模式将允许这样做,但强制更改XML结构

<AnElement id="E1"> Exterminator serial <ref id="E1"/> </AnElement>

XSD drawn using Liquid XML Studio

<?xml version="1.0" encoding="utf-8" ?>
<!--Created with Liquid XML 2015 Developer Bundle Edition 13.0.0.5686 (http://www.liquid-technologies.com)-->
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="RootElement">
        <xs:complexType>
            <xs:sequence minOccurs="0" maxOccurs="unbounded">
                <xs:element name="AnElement">
                    <xs:complexType mixed="true">
                        <xs:sequence>
                            <xs:element name="ref" minOccurs="0">
                                <xs:complexType>
                                    <xs:attribute name="id" type="xs:string" use="optional" />
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                        <xs:attribute name="id" type="xs:string" use="optional" />
                    </xs:complexType>
                    <xs:key name="IDVal">
                        <xs:selector xpath="." />
                        <xs:field xpath="@id" />
                    </xs:key>
                    <xs:keyref name="IdRef" refer="IDVal">
                        <xs:selector xpath="ref" />
                        <xs:field xpath="@id" />
                    </xs:keyref>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>