Проверка схемы для xs:date | Шаблоны дат
Я пытаюсь создать схему, которая содержит поле даты. Это поле даты имеет формат ДД-ММ-ГГГГ. BizTalk по умолчанию принимает дату в формате ГГГГ-ММ-ДД.
Я попытался использовать регулярное выражение и ниже приведен фрагмент xsd соответствующего поля
<xs:element name="FieldName">
<xs:simpleType>
<xs:restriction base="xs:date">
<xs:pattern value="[0-3]{1}[0-9]{1}-[0,1]{1}[0-9]{1}-[0-9]{4}" />
</xs:restriction>
</xs:simpleType>
</xs:element>
Затем я попытался проверить файл с помощью этого, но он не смог с ошибкой ограничения шаблона.
Что не так с выражением регулярного выражения?
Заранее спасибо
2 ответа
Я считаю, что проблема в том, что ваше поле имеет тип xs:date
, Тот факт, что BizTalk принимает формат YYYY-MM-DD, что не является предметом BizTalk, проистекает из самой спецификации XSD. Смотрите здесь: http://www.w3schools.com/schema/schema_dtypes_date.asp
Вы заметите, что ваше регулярное выражение добавляется в схему как xs:restriction
, Это используется для дальнейшего ограничения данных, содержащихся в этом узле, но все равно должно быть действительным xs:date
, Поэтому я считаю, что единственный способ справиться с этим - изменить тип вашего поля на xs:string
и иметь дело с датой другим способом (возможно, преобразовать ее в карту).
Я вряд ли рекомендую не использовать это регулярное выражение, потому что оно допускает недопустимые даты, такие как 39-19-9999.
Если вы хотите разрешить такую недействительную дату, это зависит от вас, но если нет, я нашел это регулярное выражение здесь:
^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$
которые также допускают некоторые недействительные даты, такие как 31-06-2014 (нет 31. дня в месяце июнь), но в этом регулярном выражении допускается меньше недействительных дат.