Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
2.7.0
-
None
-
None
-
Windows XP professional
Visual Studio 2005
Description
Instances of both XercesDOMParser and SAX2XMLReader threat all the documents as valid even if a document does not match schema provided.
In order if document does not match schema provided the library does not throw exception and getErrorCount method of the parser returns zero.
So it seems to be a bug in the library.
As example you can try this code: http://xml.apache.org/xerces-c/program-dom.html#ConstructXercesDOMParser
Below are provided scheme and document (error marked with "does not match schema" comment) that reproduces error:
datasetSchema.xsd:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="DataObject">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="MasterDataTable">
<xs:complexType>
<xs:sequence>
<xs:element name="key" type="xs:int"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="surname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ChildDataTable">
<xs:complexType>
<xs:sequence>
<xs:element name="key" type="xs:int"/>
<xs:element name="age" type="xs:string"/>
<xs:element name="info" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
output.xml:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<DataObject xmlns="http://creopod.com/DataObject.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="datasetSchema.xsd">
<MasterDataTable>
<key>1</key>
<name>Vasya</name>
<surname>Pupkin</surname>
</MasterDataTable>
<MasterDataTable>
<key>2</key>
<name>Petro</name>
<surname>Kukurudza</surname>
</MasterDataTable>
<ChildDataTable>
<key1>1</key1> <!-- does not match schema-->
<age>23</age>
<info>famous guy</info>
</ChildDataTable>
<ChildDataTable>
<key1>2</key1> <!-- does not match schema-->
<age>29</age>
<info></info>
</ChildDataTable>
</DataObject>