Шаблон регулярного выражения XSD: это или ничего
я пытаюсь определить правило схемы в XSD, для которого строка имеет длину 8 символов:
<PostedDate>42183296</PostedDate>
и заполнение пространства также допускается:
<PostedDate> </PostedDate>
что привело меня к XSD:
<xs:simpleType name="DateFormat">
<xs:restriction base="xs:string">
<xs:length value="8" /> //exactly 8 characters long
</xs:simpleType>
но значение can также может быть пустым (т. е. ноль символов):
<PostedDate></PostedDate>
<PostedDate />
что привело меня к наивной попытке:
<xs:simpleType name="DateFormat">
<xs:restriction base="xs:string">
<xs:length value="8" /> //exactly 8 characters long
<xs:length value="0" /> //exactly 0 characters long
</xs:simpleType>
что, конечно, не допускается.
как часто бывает в XSD, большинство форматы не могут быть легко представлены с помощью XSD, поэтому я решил попробовать правило регулярного выражения:
.{8} | ""
который пытается преобразовать в XSD, я типа:
<xs:simpleType name="DateFormat">
<xs:restriction base="xs:string">
<xs:pattern value=".{8}|''" />
</xs:restriction>
</xs:simpleType>
но это не работает:
''20101111' is not facet-valid with respect to pattern '.{8}|''' for type 'DateFormat'
я тоже пробовал
<xs:pattern value="[0-9]{8}|''" />
<xs:pattern value="([0-9]{8})|('')" />
<xs:pattern value="(d{8})|('')" />
может ли кто-нибудь еще вещь шаблона, который решает проблему соответствия либо - какой-то конкретный узор - пусто
бонус: может кто-нибудь указать на место в документация XSD что говорит о том, что d
совпадения цифр? Или каковы другие специальные коды шаблонов?
2 ответов
Я могу предположить, что скороговорки должны выглядеть как \d{8}|
Это означает "восемь цифр или ничего", но не восемь цифр или две кавычки. Однако это не объясняет, почему 20101111
не соответствует. Вы уверены, что в значении элемента нет пробелов или других дополнительных символов?\d
, как говорят, соответствуют цифрам в разделе " F. 1.1 Класс Символов Убегает"
Я также в той же ситуации, что и пустая строка, в противном случае она должна иметь 6 номеров длины. Наконец я использовал следующее. Это работает для меня
<xs:simpleType name="DateFormat">
<xs:restriction base="xs:string">
<xs:pattern value="|[0-9]{8}" />
</xs:restriction>
</xs:simpleType>