Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
2.10.0
-
None
-
JDK 1.5.0
Description
I have the following schema:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="test" type="Test"/>
<xsd:simpleType name="Test">
<xsd:restriction base="xsd:string">
<xsd:pattern value="[0-9]
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
And this xml file:
<?xml version="1.0" encoding="windows-1252"?>
<test>1010000</test>
I try to validate the file with the following test code:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder builder = dbf.newDocumentBuilder();
Document xsd = builder.parse(Main.class.getResource("/test.xsd").toString());
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema(new DOMSource(xsd));
Validator validator = schema.newValidator();
Document test = builder.parse(Main.class.getResource("/test.xml").toString());
validator.validate(new DOMSource(test));
I get an org.xml.sax.SAXParseException: cvc-pattern-valid: Value '1010000' is not facet-valid with respect to pattern '[0-9]{0,3}
([0-9]
{3})*' for type 'Test'.In my opinion, the given value should be valid for the given pattern. Even the following code prints "true":
RegularExpression re = new RegularExpression("[0-9]{0,3}([0-9]{3}
)*");
System.out.println(re.matches("1010000"));