在我的XML模式中,我創建了一個名爲NonEmptyString
的類型。它應該拒絕任何值爲空或由空白組成的任何值。我轉過身來說它應該接受任何至少有一個非空白字符的東西。這應該包括任何與兩個非空白字符之間的空格。但是,在接受「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>
謝謝。不過,我認爲這對我來說不是一個完整的解決方案。如果有三個或更多的詞怎麼辦?我試過\ S +(\ s + \ S *)*,它根據pythex.org匹配整個字符串「BATCH ANNEAL」,但驗證器仍然拒絕它。 我試圖在正則表達式中圍繞單詞「匹配」來包裹我的頭。從我讀過的內容來看,如果從字符串開頭開始的字符串的子字符串符合模式中給出的條件,則字符串「匹配」正則表達式,但並不一定意味着整個字符串符合這些條件。 –
*通常*就是這種情況(即通常一個模式可以引用子字符串),但出於驗證的目的,部分匹配不是有用的。這就是爲什麼''會根據'foo $'測試字符串。三個或更多的單詞匹配'\ S + | \ S。* \ S'複合體的'\ S。* \ S'部分,我不認爲這會有問題。 –
Tomalak
我剛試過你的字符串,它確實有效。非常感謝你!我在這裏找到了XSD驗證中使用的正則表達式的解釋:http://www.regular-expressions.info/xml.html。用三個詞匹配的複合詞的部分意味着「一個非空格,後跟任意數量的字符,後跟一個非空格」,對吧? –