Re: Problems with Simple XML Validation

> I have added a default namespace so that my xsd file now looks like this:
>
> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> targetNamespace="AnotherTestSpace"
> xmlns="AnotherTestSpace"
> elementFormDefault="qualified"
> >
>
> <xsd:element name="shipOrder" type="order"/>
> <xsd:complexType name="shipAddress">
> <xsd:sequence>
> <xsd:element   name="name"      type="xsd:string"/>
> <xsd:element   name="street"    type="xsd:string"/>
> <xsd:element   name="address"   type="xsd:string"/>
> <xsd:element   name="country"   type="xsd:string"/>
> </xsd:sequence>
> </xsd:complexType>
>
> <xsd:complexType name="cdItem">
> <xsd:sequence>
> <xsd:element   name="title"     type="xsd:string"/>
> <xsd:element   name="quantity"  type="xsd:positiveInteger"/>
> <xsd:element   name="price"     type="xsd:decimal"/>
> </xsd:sequence>
> </xsd:complexType>
>
> <xsd:complexType name="cdItems">
> <xsd:sequence>
> <xsd:element   name="item"      type="cdItem"/>
> </xsd:sequence>
> </xsd:complexType>
>
> <xsd:complexType name="order">
> <xsd:sequence>
> <xsd:element   name="shipTo"    type="shipAddress"/>
> <xsd:element   name="items"     type="cdItems"/>
> </xsd:sequence>
> </xsd:complexType>
> </xsd:schema>

Looks good!

> Here are my two attempts at modifying my xml file:
>
> Attempt 1:
> <?xml version="1.0" encoding="UTF-8"?>
> <foo:shipOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xsi:schemaLocation="AnotherTestSpace order_schema.xsd"
> xmlns:foo="AnotherTestSpace"
> >
> <shipTo>
> <name>Tove Svendson</name>
> <street>Ragnhildvei 2</street>
> <address>4000 Stavanger</address>
> etc...

No, this won't work. Since you have elementFormDefault="qualified" in your schema all
elements in the instance document will have to be qualified with a namespace. In the
above its only the shipOrder element that is qualified and the rest of the elements
are unqualified.

> Attempt 2:
> <?xml version="1.0" encoding="UTF-8"?>
> <shipOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xsi:schemaLocation="AnotherTestSpace order_schema.xsd"
> xmlns="AnotherTestSpace"
> >
> <shipTo>
> <name>Tove Svendson</name>
> <street>Ragnhildvei 2</street>
> <address>4000 Stavanger</address>
> etc...

This should work though. It works fine in all the validators I've tested with (XML
Spy, XSV and Xerces 2 beta).

> In each case I get the following error:
>
> [Error] simple.xml:5:2: General Schema Error: Grammar with uri 2:
> AnotherTestSpace , can not found.
>
> In addition I still get the other errors from before:
>
> [Error] simple.xml:5:2: Element type "shipOrder" must be declared.
> [Error] simple.xml:6:9: Element type "shipTo" must be declared.
> etc...
>
> I am using Xerces 1.3.0's SAXCount parser.
> I verified that the xsd file is in fact named order_schema.xsd,
> and that it exists in the same directory as my xml file.  I must be missing
> something fundamental which I don't know about.

I'd say it's a bug in Xerces 1.3.0.

Cheers,
/Eddie

Received on Tuesday, 4 December 2001 19:40:21 UTC