Uploaded image for project: 'Xerces-C++'
  1. Xerces-C++
  2. XERCESC-1736

xml document validation againsta schema

    XMLWordPrintableJSON

Details

    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>

      Attachments

        Activity

          People

            Unassigned Unassigned
            dtkachov Denis Tkachov
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: