我试图对我的一个元素使用模式匹配,列出一周中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;来自网站,以防万一,我收到相同的失败消息。
答案 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>