1

我有以下 XML 架构,我试图在其中允许一个元素有 2 个不同的值:

<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:simpleType name="DATE_MM_DD_YYYY">
    <xs:restriction base="xs:string">
      <xs:pattern value="[0-1][0-9]/[0-3][0-9]/[0-9]{4}"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="DATE_MM_DD_YY">
    <xs:restriction base="xs:string">
      <xs:pattern value="[0-1][0-9]/[0-3][0-9]/[0-9]{2}"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:element name="Transaction">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Date1" type="DATE_MM_DD_YYYY" />
        <xs:choice>
          <xs:element name="Date2" type="DATE_MM_DD_YYYY" />
          <!--Error-->
          <xs:element name="Date2" type="DATE_MM_DD_YY" />
        </xs:choice>
        <xs:element name="Field1" />
        <xs:element name="Field2" />
        <xs:element name="Field3" />
        <!--...-->
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

我希望以 2 种不同格式指定名为“Date2”的元素。

我似乎无法让“xs:choice”工作,我想我可能需要定义一个允许两种格式中的一种或两种格式的新模式。

这样做的正确方法是什么?

4

1 回答 1

1

您可以在 xml 模式模式中使用交替和分组。例如,([0-9]{2}|[0-9]{4})

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:simpleType name="DATE_MM_DD_YYYY">
    <xs:restriction base="xs:string">
      <xs:pattern value="[0-1][0-9]/[0-3][0-9]/[0-9]{4}"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="FLEXDATE">
    <xs:restriction base="xs:string">
      <xs:pattern value="[0-1][0-9]/[0-3][0-9]/([0-9]{2}|[0-9]{4})"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:element name="Transaction">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Date1" type="DATE_MM_DD_YYYY" />
        <xs:element name="Date2" type="FLEXDATE" />
        <xs:element name="Field1" type='xs:string' />
        <xs:element name="Field2" type='xs:string' />
        <xs:element name="Field3" type='xs:string' />
        <!--...-->
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

ps:我认为你的模式可以更严格。事实上,00/00/0000 的日期过去了。

于 2011-06-08T17:41:36.717 回答