xml:所有人都想要全部或全无?

时间:2016-10-15 00:06:29

标签: xml schema

寻找一位XML Guru来回答一个异常。我运气不好,检查了多个网页。

我有一个带有xs的复杂数据类型:all in it设置为minOccurs = 0,如下所示:

<xs:complexType name="EffectRecord">
        <xs:complexContent>
            <xs:restriction base="xs:anyType">
                <xs:all minOccurs="0" maxOccurs="1">
                    <xs:element name="P1Name" type="xs:string"/>
                    <xs:element name="P2Name" type="xs:string"/>
                    <xs:element name="P3Name" type="xs:string"/>
                    <xs:element name="BasedOnStat" type="xs:string"/>
                </xs:all>
                <xs:attribute name="EffectName" type="xs:string" use="required"/>
                <xs:attribute name="Description" type="xs:string" use="required"/>
                <xs:attribute name="CostFormula" type="xs:string" use="required"/>
            </xs:restriction>
        </xs:complexContent>
    </xs:complexType>

我稍后在我的架构中使用该类型:

xs:element name="World">
    <xs:complexType>
        <xs:all>
            <xs:element name="Statistics">
                <xs:complexType>
                    <xs:sequence minOccurs="1" maxOccurs="unbounded">
                        <xs:element name="Statistic" type="StatRecord"/>
                    </xs:sequence>
                </xs:complexType>
                <xs:key name="StatKey">
                    <xs:selector xpath="World/Statistics"/>
                    <xs:field xpath="@Name"/>
                </xs:key>
                <xs:keyref refer="StatKey" name="StatRef">
                    <xs:selector xpath="EffectRecord"/>
                    <xs:field xpath="BasedOnStat"/>
                </xs:keyref>
            </xs:element>
            <xs:element name="Effects">
                <xs:complexType>
                    <xs:sequence maxOccurs="unbounded" minOccurs="0">
                        <xs:element name="Effect" type="EffectRecord"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:all>
    </xs:complexType>
</xs:element>

当我尝试在我的架构驱动的XML编辑器中使用此架构编写文档时,可以这样做:

<?xml version="1.0" encoding="UTF-8"?>

<Statistics>
    <Statistic Name="Strength" Abbreviation="STR" Cost="3"/>
    <Statistic Name="Toughness" Abbreviation="TOU" Cost="2"/>
</Statistics>
<Effects>
    <Effect EffectName="foo" Description="A foo" CostFormula="P1*2">

    </Effect>
</Effects>

但这会产生错误元素的内容&#39;效果&#39;不完整。其中一个是{P2Name,P3Name,BasedOnStat}&#39;是预期的。

<?xml version="1.0" encoding="UTF-8"?>

<Statistics>
    <Statistic Name="Strength" Abbreviation="STR" Cost="3"/>
    <Statistic Name="Toughness" Abbreviation="TOU" Cost="2"/>
</Statistics>
<Effects>
    <Effect EffectName="foo" Description="A foo" CostFormula="P1*2">
        <P1Name></P1Name>
    </Effect>
</Effects>

为什么包含其中一个元素意味着它们都必须包括在内?这与我发现的xs:all的任何定义都不匹配。我想要的是所有的所有子元素都是可选的,但最多只出现一次。

谢谢,真的在这里击打屏幕。

1 个答案:

答案 0 :(得分:0)

好的,我回答了自己的问题。我的minOccurs处于错误的水平。对于我想要的效果,它属于每个元素,而不是全部。