В моей схеме 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. Часть соединения, которая сопоставляется тремя словами, означает «Непространство, за которым следует любое количество символов, за которым следует не космос», правильно? –