- From: Costello, Roger L. <costello@mitre.org>
- Date: Sat, 28 Jan 2012 23:00:24 +0000
- To: "xmlschema-dev@w3.org" <xmlschema-dev@w3.org>
Hi Folks, The following schema document is erroneous because the element A1 is trying to reference a type XYZ in no-namespace: A.xsd ---------------------------------------------------------------------- <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org" elementFormDefault="qualified"> <xs:include schemaLocation="B.xsd"/> <xs:simpleType name="XYZ"> <xs:restriction base="xs:string"> <xs:maxLength value="10"/> </xs:restriction> </xs:simpleType> <xs:element name="A1" type="XYZ" /> </xs:schema> ---------------------------------------------------------------------- The error is fixed by adding a default namespace declaration: A.xsd ---------------------------------------------------------------------- <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org" xmlns="http://www.example.org" elementFormDefault="qualified"> <xs:include schemaLocation="B.xsd"/> <xs:simpleType name="XYZ"> <xs:restriction base="xs:string"> <xs:maxLength value="10"/> </xs:restriction> </xs:simpleType> <xs:element name="A1" type="XYZ" /> </xs:schema> ---------------------------------------------------------------------- Good. Now let's remove the element A1 and remove the default namespace declaration. This is a valid schema: A.xsd ---------------------------------------------------------------------- <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org" elementFormDefault="qualified"> <xs:include schemaLocation="B.xsd"/> <xs:simpleType name="XYZ"> <xs:restriction base="xs:string"> <xs:maxLength value="10"/> </xs:restriction> </xs:simpleType> </xs:schema> ---------------------------------------------------------------------- Notice that the schema document includes B.xsd. Let's look at it. It is a no-namespace schema document: B.xsd ---------------------------------------------------------------------- <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="B2" type="XYZ" /> </xs:schema> ---------------------------------------------------------------------- Since A.xsd has a targetNamespace the B.xsd schema document is namespace-coerced to the namespace of A.xsd. Observe that element B2 references type XYZ which is in A.xsd. When I validate A.xsd it validates fine. Hey! How can that be? Recall that I removed the default namespace declaration from A.xsd. Why can element B2 reference type XYZ without a default namespace declaration but element A1 couldn't? /Roger
Received on Saturday, 28 January 2012 23:01:00 UTC