2016-02-02 11 views
0

Я пытаюсь реализовать базовую проверку на XML против определенного XSD XML:не в состоянии подтвердить Дата против XSD

<Employee type="permanent"> 
    <Name>John</Name> 
    <employeeId>9000</employeeId> 
    <Age>28</Age> 
    <dateOfBirth>28/12/2000</dateOfBirth> 
    <city>Vancouver</city> 
    <salary>120000</salary> 
</Employee> 

XSD:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Employee"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="Name" type="xs:string"></xs:element> 
       <xs:element name="employeeId" type="xs:int"></xs:element> 
       <xs:element name="Age" type="xs:int"></xs:element> 
       <xs:element name="dateOfBirth" type="xs:date"></xs:element> 
       <xs:element name="city" type="xs:string"></xs:element> 
       <xs:element name="salary" type="xs:int"></xs:element> 
      </xs:sequence> 
      <xs:attribute name="type" type="xs:string"></xs:attribute> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

Но когда я бегу валидатор:

SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
      Schema schema = factory.newSchema(new File(schemaPath)); 
      Validator validator = schema.newValidator(); 
      validator.setErrorHandler(new BasicErrorHandler()); 
      validator.validate(new StreamSource(new File(xmlPath))); 

Я продолжаю получать следующее сообщение об ошибке:

cvc-datatype-valid.1.2.1: '12/28/2000' is not a valid value for 'date'. 
cvc-type.3.1.3: The value '12/28/2000' of element 'dateOfBirth' is not valid. 

Теперь, когда я попытался найти решение на SO и Google вот что я нашел:

<xs:element name="root"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="testdate" type="zsdate"/> 
       <xs:element name="testtime" type="zstime"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 

    <xs:simpleType name="zsdate"> 
     <xs:restriction base="xs:date"> 
      <xs:pattern value="^(0[1-9]|[12][0-9]|3[01]).(0[1-9]|1[012]).(19|20)\d\d$"/> 
     </xs:restriction> 
    </xs:simpleType> 

Я не хочу, чтобы преобразовать тип данных в строку и подтвердить против регулярных выражений. Моя дата всегда будет в формате dd/mm/yyyy. Как это написано в XML, вставленном выше.

Есть что-то, что мне не хватает.

P.S. когда я использую следующее:

<dateOfBirth>2012-08-22</dateOfBirth> 

он отлично работает.

+0

Ваш XSD показывает 'dateOfBirth' как элемент' xs: string'. Это опечатка? – SJuan76

+0

@ SJuan76 Извините, да, это –

ответ

2

<xs:date> должно быть в формате YYYY-MM-DD. Поэтому либо вы пишете это так, либо вы принимаете <xs:string> с регулярным выражением.

+0

Я боялся этого, разве я не могу указать формат в XSD –

+0

Я боюсь, что нет. В чем проблема с ''? – halloei

+2

Немного фона здесь: некоторые из них придерживаются довольно твердого представления о том, что XML предназначен для обмена данными, и когда вы выполняете обмен данными, вы должны использовать международные стандарты для таких форматов, как даты, а не локальные соглашения, которые могут применяться в некоторых частях вашего сообщества пользователей. Если вы хотите, чтобы пользователи видели даты в форматах d/m/y или m/d/y, которые должны быть частью уровня представления приложения, это не должно влиять на уровень обмена данными и хранения. –

 Смежные вопросы

  • Нет связанных вопросов^_^