在我的XML架构中,我创建了一个名为NonEmptyString
的类型。它应该拒绝任何null值或只包含空格的值。我转过身去说它应该接受任何至少有一个非空白字符的东西。这应该包括两个非空白字符之间的空格。但是,它在接受“BATCH_ANNEAL”时拒绝“BATCH ANNEAL”。
如果重要,我将在Python 3脚本中使用此架构,尽管this XML validator也拒绝它。
这是XML Schema定义:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="NonEmptyString">
<xs:restriction base="xs:string">
<xs:pattern value="\S+" />
</xs:restriction>
</xs:simpleType>
<xs:element name="MESSAGE">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:short" name="MESSAGE_NUMBER"/>
<xs:element type="NonEmptyString" name="MESSAGE_TYPE"/>
<xs:element type="NonEmptyString" name="PLANT_CODE"/>
<xs:element type="NonEmptyString" name="PLANT_TEXT"/>
<xs:element type="xs:dateTime" name="TIMESTAMP"/>
<xs:element type="NonEmptyString" name="SIMULATION_INDEX"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
这是我试图对其进行验证的元素。
<MESSAGE>
<MESSAGE_NUMBER>2601</MESSAGE_NUMBER>
<MESSAGE_TYPE>MaterialData</MESSAGE_TYPE>
<PLANT_CODE>ANBA</PLANT_CODE>
<PLANT_TEXT>BATCH ANNEAL</PLANT_TEXT>
<TIMESTAMP>2016-03-01T08:54:53</TIMESTAMP>
<SIMULATION_INDEX>N</SIMULATION_INDEX>
</MESSAGE>
答案 0 :(得分:2)
模式始终必须与整个值匹配。 \S+
与"BATCH_ANNEAL"
匹配,但与"BATCH ANNEAL"
不匹配。
尝试
<xs:pattern value="\S+|\S.*\S" />
强制执行完全非空白或以非空白字符开头和结尾的值。如有必要,请使用比.
更具体的内容。
答案 1 :(得分:1)
这是@ Tomalak(精细,+1)基于正则表达式的解决方案的替代方案。此方法使用xs:minLength
和xs:whiteSpace
方面而不是xs:pattern
正则表达式:
<xs:simpleType name="NonEmptyString">
<xs:restriction base="xs:string">
<xs:minLength value="1" />
<xs:whiteSpace value='collapse'/>
</xs:restriction>
</xs:simpleType>