XSD限制为一周中的一天或多天

时间:2017-05-10 19:39:36

标签: regex xml xsd

我试图对我的一个元素使用模式匹配,列出一周中1到7个短名称。我尝试在与之匹配的在线工具中创建一个模式,但在XSD中验证时失败。

元素的示例方式可以进入。

<DayOfWeek>Mon Tue Wed Thu Fri Sat Sun </DayOfWeek>
<DayOfWeek>Mon Wed Fri </DayOfWeek>

我使用http://www.regexpal.com/来帮助创建以下正则表达式模式。我尝试使用以下工作在网站上:

(Mon)?(Tue)?(Wed)?(Thu)?(Fri)?(Sat)?(Sun)?[ ]+
(Mon[ ]+)?(Tue[ ]+)?(Wed[ ]+)?(Thu[ ]+)?(Fri[ ]+)?(Sat[ ]+)?(Sun[ ]+)?

在以下simpleType中应用时:

<xs:simpleType name="ValidDays">
    <xs:restriction base="xs:token">
        <xs:pattern value="(Mon[ ]+)?(Tue[ ]+)?(Wed[ ]+)?(Thu[ ]+)?(Fri[ ]+)?(Sat[ ]+)?(Sun[ ]+)?" />
    </xs:restriction>
</xs:simpleType>

这里引用了XSD中的元素:

<xs:element name="DayOfWeek">
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:extension base="ValidDays" />
                    </xs:simpleContent>
                </xs:complexType>
                </xs:element>

对于任一模式限制,它都会失败并显示此消息:

The 'DayOfWeek' element is invalid - The value 'Mon Tue Wed Thu Fri Sat Sun ' is invalid according to its datatype 'Token' - The Pattern constraint failed.

我甚至尝试过应用&#39; /&#39;和&#39; / g&#39;来自网站,以防万一,我收到相同的失败消息。

1 个答案:

答案 0 :(得分:1)

对于以空格分隔的枚举值列表,请使用xs:list而不是regex:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="DayOfWeek">
    <xs:simpleType>
      <xs:restriction>
        <xs:simpleType>
          <xs:list itemType="ValidDays"/>
        </xs:simpleType>
        <xs:minLength value="1"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <xs:simpleType name="ValidDays">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Sun"/>
      <xs:enumeration value="Mon"/>
      <xs:enumeration value="Tue"/>
      <xs:enumeration value="Wed"/>
      <xs:enumeration value="Thu"/>
      <xs:enumeration value="Fri"/>
      <xs:enumeration value="Sat"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>