具有相同名称但不同类型的多个元素

时间:2018-04-19 03:51:02

标签: xml xsd

我创建的XML显示了调查的回复。

XML

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type='text/xsl'?>
<survey>
    <questions>
        <question id="1">When did you start playing Pokemon Go?</question>
        <question id="2">What type of phone/OS do you play on?</question>
        <question id="3">What team are you on?</question>
        <question id="4">What Level Are You?</question>
        <question id="5">How many pokemon have you caught?</question>
        <question id="6">How many KM have you traveled? (Jogger medal)</question>
    </questions>
    <responses>
        <response id="1">
            <answer question="1">June</answer>
            <answer question="2">Android</answer>
            <answer question="3">Mystic (Blue)</answer>
            <answer question="4">25</answer>
            <answer question="5">0 to 1000</answer>
            <answer question="6">Silver</answer>
        </response>
        <response id="2">
            <answer question="1">June</answer>
            <answer question="2">Android</answer>
            <answer question="3">Mystic (Blue)</answer>
            <answer question="4">32</answer>
            <answer question="5">0 to 1000</answer>
            <answer question="6">Silver</answer>
        </response>
        ... More responses...
    </responses>
</survey>

XSD(仅问题元素)

<xs:element name="questions">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="question">
                                <xs:complexType>
                                    <xs:simpleContent>
                                        <xs:extension base="xs:string">
                                            <xs:attribute name="id" 
                                             type="xs:int" use="required" 
                                             fixed="1"/>    
                                        </xs:extension>
                                    </xs:simpleContent>
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="question">
                                <xs:complexType>
                                    <xs:simpleContent>
                                        <xs:extension base="xs:string">
                                            <xs:attribute name="id" 
                                             type="xs:int" use="required" 
                                              fixed="2"/>   
                                        </xs:extension>
                                    </xs:simpleContent>
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="question">
                                <xs:complexType>
                                    <xs:simpleContent>
                                        <xs:extension base="xs:string">
                                            <xs:attribute name="id" 
                                             type="xs:int" use="required" 
                                             fixed="3"/>    
                                        </xs:extension>
                                    </xs:simpleContent>
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="question">
                                <xs:complexType>
                                    <xs:simpleContent>
                                        <xs:extension base="xs:string">
                                            <xs:attribute name="id" 
                                             type="xs:int" use="required" 
                                              fixed="4"/>   
                                        </xs:extension>
                                    </xs:simpleContent>
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="question">
                                <xs:complexType>
                                    <xs:simpleContent>
                                        <xs:extension base="xs:string">
                                            <xs:attribute name="id" 
                                             type="xs:int" use="required" 
                                             fixed="5"/>    
                                        </xs:extension>
                                    </xs:simpleContent>
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="question">
                                <xs:complexType>
                                    <xs:simpleContent>
                                        <xs:extension base="xs:string">
                                            <xs:attribute name="id" 
                                             type="xs:int" use="required" 
                                             fixed="6"/>    
                                        </xs:extension>
                                    </xs:simpleContent>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>

我的架构一直给我一个错误,说我有多个具有相同名称的元素,但是当我尝试根据我的XML验证它时,它有不同的类型。 现在我在这里问了一个关于我的XML设计的问题,并且被告知使用不同的元素等是非常愚蠢的。这就是为什么我重复了元素名称,但每个元素都有一个识别属性。

是否有任何解决方法不涉及重新设计XML?

1 个答案:

答案 0 :(得分:0)

XSD约束称为&#34;元素声明一致&#34;明确地说你不能拥有两个同名但不同类型的兄弟元素。

您是否确定需要这样的细粒度架构,更改问卷中的问题需要更改架构?

如果您确实想这样做,可以使用&#34;条件类型分配&#34; XSD 1.1(又名类型替代)中的一个特性,您可以根据@id属性的值来设置question元素的类型。

但整个设计对我来说都是错误的。我会寻找描述任何可能的调查问卷的通用模式。