我有以下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”工作,我想我可能需要定义一个允许其中一种或两种格式的新模式。
这样做的正确方法是什么?
答案 0 :(得分: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。