Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在xml模式中定义发生指示器(发生在所有元素中或根本不发生)_Xml_Xslt_Schema_Xsd - Fatal编程技术网

如何在xml模式中定义发生指示器(发生在所有元素中或根本不发生)

如何在xml模式中定义发生指示器(发生在所有元素中或根本不发生),xml,xslt,schema,xsd,Xml,Xslt,Schema,Xsd,我有以下xml模式 我可以限制出现的最大和最小限制,但如何定义f1应该出现在字段的所有元素中或根本不应该出现的限制 任何帮助都将不胜感激 <xs:element name="fields"> <xs:complexType> <xs:sequence> <xs:element name="field" maxOccurs="unbounded"> <xs:comp

我有以下xml模式

我可以限制出现的最大和最小限制,但如何定义f1应该出现在字段的所有元素中或根本不应该出现的限制

任何帮助都将不胜感激

<xs:element name="fields">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="field" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="name" type="xs:string" />
                        <xs:element name="f1" type="xs:integer" minOccurs="0" />
                        <xs:element name="f2" type="xs:integer" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>

经过一番思考,我想我现在明白你的意思了。您不希望f1像我想的那样出现在
的所有子元素中,也不希望f1出现在任何子元素中,但您希望f1出现在更高的级别:您希望一个
父元素中的所有
元素都有一个子元素,或者没有子元素。这在XMLSchema1.0和XMLSchema1.1中仍然是不可能的,只有xpath断言。使用xml模式规范使用的类型概念进行建模也不是一种自然的方式

但是,如果在
父级中创建不同类型的字段,则很容易建立类似于所需的模型。假设您为元素“”分配了一个复杂类型,该元素具有必需的“”子元素,而为元素
分配了另一个复杂类型,该元素根本不能具有这样的子元素。然后,您可以使用
轻松地说
的所有子级都应该是
或``

模式

<xs:element name="fields">
    <xs:complexType>
        <xs:choice>
            <xs:element name="field" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="name" type="xs:string" />
                        <xs:element name="f2" type="xs:integer" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="f1field" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="name" type="xs:string" />
                        <xs:element name="f1" type="xs:integer" />
                        <xs:element name="f2" type="xs:integer" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:choice>
    </xs:complexType>
</xs:element>
<fields>
    <f1field>
        <name>x</name>
        <f1>3</f1>
        <f2>2</f2>
    </f1field>
    <f1field>
        <name>x</name>
        <f1>3</f1>
        <f2>2</f2>
    </f1field>
    <!-- Next field will be rejected by validator because there are 
         already f1field elements -->
    <field> 
        <name>df</name>
        <f2>5</f2>
    </field>
</fields>

XML

<xs:element name="fields">
    <xs:complexType>
        <xs:choice>
            <xs:element name="field" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="name" type="xs:string" />
                        <xs:element name="f2" type="xs:integer" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="f1field" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="name" type="xs:string" />
                        <xs:element name="f1" type="xs:integer" />
                        <xs:element name="f2" type="xs:integer" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:choice>
    </xs:complexType>
</xs:element>
<fields>
    <f1field>
        <name>x</name>
        <f1>3</f1>
        <f2>2</f2>
    </f1field>
    <f1field>
        <name>x</name>
        <f1>3</f1>
        <f2>2</f2>
    </f1field>
    <!-- Next field will be rejected by validator because there are 
         already f1field elements -->
    <field> 
        <name>df</name>
        <f2>5</f2>
    </field>
</fields>

x
3.
2.
x
3.
2.
df
5.

我的回答对你有帮助吗?@Erwin是的。非常感谢。