XSD Регулярное выражение рисунков: это или ничего
-
26-09-2019 - |
Вопрос
Я пытаюсь определить правило схемы в 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>
Но значение могу Также быть пустым (то есть нулевые символы длинные):
<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 i Type:
<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
соответствует цифрам? Или какие другие специальные коды образцов?
Решение
Я могу догадаться, что ваттеры должны выглядеть как \d{8}|
Это означает «восемь цифр или ничего», но не восемь цифр или две цитаты. Однако это не объясняет, почему 20101111
не совпадает. Вы уверены, что нет пробелов или других дополнительных символов в значении элемента?
\d
Говорят, что соответствует цифрам в разделе «Класс персонажей F.1.1 Escapes»
Другие советы
Я также в той же ситуации, такой как пустая строка, допускается иначе она должна 6 длинных чисел. Наконец я использовал как следующее. Это работает для меня
<xs:simpleType name="DateFormat">
<xs:restriction base="xs:string">
<xs:pattern value="|[0-9]{8}" />
</xs:restriction>
</xs:simpleType>