Я пытаюсь реализовать базовую проверку на 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>
он отлично работает.
Ваш XSD показывает 'dateOfBirth' как элемент' xs: string'. Это опечатка? – SJuan76
@ SJuan76 Извините, да, это –