如果我有这些规则:
PIZZA-->doughSAUCECHEESE
SAUCE-->marinara | bbq | pesto
CHEESE-->mozarella |
比萨饼串由文字“面团”组成,后面是3个调味汁中的一个。它可以在那里结束(没有奶酪)或以文字'mozarella'结束。 这是我的xml架构:
<xs:element name="pizza">
<xs:complexType>
<xs:element name="doughLiteral" type="xs:string" fixed="dough"/>
<xs:element name="sauce">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="marinara"/>
<xs:enumeration value="bbq"/>
<xs:enumeration value="pesto"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="cheese">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="mozarella"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value=""/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs: complexType>
</xs: element>
我不确定我是否正确指定了空字符串。另外,我读到默认情况下属性是可选的,默认情况下元素是正确的,即上面的模式表明必须有1个酱?谢谢。
答案 0 :(得分:1)
默认情况下,元素是强制性的,以使其可选使用minOccurs="0"
。
您缺少xs:sequence
,xs:simpleType
元素定义中使用的双cheese
不正确。
正确的架构应该是这样的:
<xs:element name="pizza">
<xs:complexType>
<xs:sequence>
<xs:element name="doughLiteral" type="xs:string" fixed="dough"/>
<xs:element name="sauce">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="marinara"/>
<xs:enumeration value="bbq"/>
<xs:enumeration value="pesto"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="cheese" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="mozarella"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
话虽如此,正如@seki正确地指出这个模式定义了一个XML结构,如:
<pizza>
<doughLiteral>dough</doughLiteral>
<sauce>marinara</sauce>
<cheese>mozzarella</cheese>
</pizza>
不是您在问题开头指定的纯文本语法。