0

如果我有这些规则:

PIZZA-->doughSAUCECHEESE

SAUCE-->marinara | bbq | pesto

CHEESE-->mozarella | 

比萨字符串由文字“面团”和 3 种酱汁中的 1 种组成。它可能在那里结束(没有奶酪)或以文字“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 个酱汁,对吗?谢谢你。

4

1 回答 1

1

默认情况下,元素是强制性的,使它们成为可选使用minOccurs="0"

您缺少 a并且元素定义中使用xs:sequence的 double不正确。xs:simpleTypecheese

正确的架构应该是这样的:

<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>

不是您在问题开头指定的纯文本语法。

于 2013-08-05T14:48:46.447 回答