C
ciaran.mchale
Hi folks,
I downloaded the binary version of Xerces C++ 2.7.0 for Windows and am
using it to help me get up to speed with XML and XML Schema. So please
excuse me if this is a "novice" question.
In the samples/data directory, I ran the following command for all the
files:
DOMPrint -n -s -f -v=always <filename>
The above command worked for the two ".xml" files. So far, so good.
The above command failed for the ".dtd" files. This is fine because a
".dtd" file is *not* in XML format.
What confuses me is that the above command failed for the ".xsd" file.
The file is "well formed", as I can see if I run DOMPrint on it
*without* the schema validation options. However, when I use the schema
validation options then DOMPrint complains about 128 "validity" errors.
This surprises me because I was expecting to be able to use a
validating
parser (such as Xerces) to validate schemas as well as schema
instances.
Am I doing something wrong? Is there a mistake in the ".xsd" document?
Is there a bug in Xerces?
I am including the ".xsd" file below for people who do not have Xerces
C++.
----start of .xsd file----
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'>
<xs:import namespace="http://www.w3.org/XML/1998/namespace">
<xs:annotation>
<xs:documentation>
The schemaLocation of the relevant file is
"http://www.w3.org/2001/xml.xsd"; however,
we don't want to assume people are always
connected to the 'net when playing with this file.
</xs:documentation>
</xs:annotation>
</xs:import>
<xs:element name="personnel">
<xs:complexType>
<xs:sequence>
<xs:element ref="person" minOccurs='1' maxOccurs='unbounded'/>
</xs:sequence>
</xs:complexType>
<xs:unique name="unique1">
<xs:selector xpath="person"/>
<xs:field xpath="name/given"/>
<xs:field xpath="name/family"/>
</xs:unique>
<xs:key name='empid'>
<xs:selector xpath="person"/>
<xs:field xpath="@id"/>
</xs:key>
<xs:keyref name="keyref1" refer='empid'>
<xs:selector xpath="person"/>
<xs:field xpath="link/@manager"/>
</xs:keyref>
</xs:element>
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element ref="name"/>
<xs:element ref="email" minOccurs='0' maxOccurs='unbounded'/>
<xs:element ref="url" minOccurs='0' maxOccurs='unbounded'/>
<xs:element ref="link" minOccurs='0' maxOccurs='1'/>
</xs:sequence>
<xs:attribute name="id" type="xs:ID" use='required'/>
<xs:attribute name="note" type="xs:string"/>
<xs:attribute name="contr" default="false">
<xs:simpleType>
<xs:restriction base = "xs:string">
<xs:enumeration value="true"/>
<xs:enumeration value="false"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="salary" type="xs:integer"/>
<xs:anyAttribute namespace="http://www.w3.org/XML/1998/namespace"
processContents="skip"/>
</xs:complexType>
</xs:element>
<xs:element name="name">
<xs:complexType>
<xs:all>
<xs:element ref="family"/>
<xs:element ref="given"/>
</xs:all>
<xs:anyAttribute namespace="http://www.w3.org/XML/1998/namespace"
processContents="skip"/>
</xs:complexType>
</xs:element>
<xs:element name="family">
<xs:complexType>
<xs:simpleContent>
<xs:extension base='xs:string'>
<xs:anyAttribute
namespace="http://www.w3.org/XML/1998/namespace"
processContents="skip"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="given" >
<xs:complexType>
<xs:simpleContent>
<xs:extension base='xs:string'>
<xs:anyAttribute
namespace="http://www.w3.org/XML/1998/namespace"
processContents="skip"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="email" type='xs:string'/>
<xs:element name="url">
<xs:complexType>
<xs:attribute name="href" type="xs:string" default="http://"/>
</xs:complexType>
</xs:element>
<xs:element name="link">
<xs:complexType>
<xs:attribute name="manager" type="xs:IDREF"/>
<xs:attribute name="subordinates" type="xs:IDREFS"/>
</xs:complexType>
</xs:element>
<xs:notation name='gif' public='-//APP/Photoshop/4.0'
system='photoshop.exe'/>
</xs:schema>
----end of .xsd file----
Regards,
Ciaran.
I downloaded the binary version of Xerces C++ 2.7.0 for Windows and am
using it to help me get up to speed with XML and XML Schema. So please
excuse me if this is a "novice" question.
In the samples/data directory, I ran the following command for all the
files:
DOMPrint -n -s -f -v=always <filename>
The above command worked for the two ".xml" files. So far, so good.
The above command failed for the ".dtd" files. This is fine because a
".dtd" file is *not* in XML format.
What confuses me is that the above command failed for the ".xsd" file.
The file is "well formed", as I can see if I run DOMPrint on it
*without* the schema validation options. However, when I use the schema
validation options then DOMPrint complains about 128 "validity" errors.
This surprises me because I was expecting to be able to use a
validating
parser (such as Xerces) to validate schemas as well as schema
instances.
Am I doing something wrong? Is there a mistake in the ".xsd" document?
Is there a bug in Xerces?
I am including the ".xsd" file below for people who do not have Xerces
C++.
----start of .xsd file----
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'>
<xs:import namespace="http://www.w3.org/XML/1998/namespace">
<xs:annotation>
<xs:documentation>
The schemaLocation of the relevant file is
"http://www.w3.org/2001/xml.xsd"; however,
we don't want to assume people are always
connected to the 'net when playing with this file.
</xs:documentation>
</xs:annotation>
</xs:import>
<xs:element name="personnel">
<xs:complexType>
<xs:sequence>
<xs:element ref="person" minOccurs='1' maxOccurs='unbounded'/>
</xs:sequence>
</xs:complexType>
<xs:unique name="unique1">
<xs:selector xpath="person"/>
<xs:field xpath="name/given"/>
<xs:field xpath="name/family"/>
</xs:unique>
<xs:key name='empid'>
<xs:selector xpath="person"/>
<xs:field xpath="@id"/>
</xs:key>
<xs:keyref name="keyref1" refer='empid'>
<xs:selector xpath="person"/>
<xs:field xpath="link/@manager"/>
</xs:keyref>
</xs:element>
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element ref="name"/>
<xs:element ref="email" minOccurs='0' maxOccurs='unbounded'/>
<xs:element ref="url" minOccurs='0' maxOccurs='unbounded'/>
<xs:element ref="link" minOccurs='0' maxOccurs='1'/>
</xs:sequence>
<xs:attribute name="id" type="xs:ID" use='required'/>
<xs:attribute name="note" type="xs:string"/>
<xs:attribute name="contr" default="false">
<xs:simpleType>
<xs:restriction base = "xs:string">
<xs:enumeration value="true"/>
<xs:enumeration value="false"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="salary" type="xs:integer"/>
<xs:anyAttribute namespace="http://www.w3.org/XML/1998/namespace"
processContents="skip"/>
</xs:complexType>
</xs:element>
<xs:element name="name">
<xs:complexType>
<xs:all>
<xs:element ref="family"/>
<xs:element ref="given"/>
</xs:all>
<xs:anyAttribute namespace="http://www.w3.org/XML/1998/namespace"
processContents="skip"/>
</xs:complexType>
</xs:element>
<xs:element name="family">
<xs:complexType>
<xs:simpleContent>
<xs:extension base='xs:string'>
<xs:anyAttribute
namespace="http://www.w3.org/XML/1998/namespace"
processContents="skip"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="given" >
<xs:complexType>
<xs:simpleContent>
<xs:extension base='xs:string'>
<xs:anyAttribute
namespace="http://www.w3.org/XML/1998/namespace"
processContents="skip"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="email" type='xs:string'/>
<xs:element name="url">
<xs:complexType>
<xs:attribute name="href" type="xs:string" default="http://"/>
</xs:complexType>
</xs:element>
<xs:element name="link">
<xs:complexType>
<xs:attribute name="manager" type="xs:IDREF"/>
<xs:attribute name="subordinates" type="xs:IDREFS"/>
</xs:complexType>
</xs:element>
<xs:notation name='gif' public='-//APP/Photoshop/4.0'
system='photoshop.exe'/>
</xs:schema>
----end of .xsd file----
Regards,
Ciaran.