Hello, all.
I'm using Xerces 2.4.0 on Linux and am having no luck getting the SAX parser to enforce XML Schema identity constraints using the default namespace.
On the other hand, if I specify an explicit namespace for my schema, and the XPath expressions in my key and keyref selectors use the qualified name that includes the prefix, everything works.
So, having defined a document root, a child element of the root, and the child's children, "thing" and "thingRef", this
<xsd:schema xmlns="http://example.com/schema" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://example.com/schema">
...
<xsd:key name="thingKey">
<xsd:selector xpath=".//thing"/>
<xsd:field xpath="@code"/>
</xsd:key> <xsd:keyref name="thingKeyRef" refer="thingKey">
<xsd:selector xpath=".//thingRef"/>
<xsd:field xpath="@id"/>
</xsd:keyref>...
</xsd:schema>
doesn't throw any errors when the thingRef ids don't match the thing codes in an instance document (which was a surprise; I expected an identity constraint error), but this
<xsd:schema xmlns:pre="http://example.com/schema" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://example.com/schema">
...
<xsd:key name="thingKey">
<xsd:selector xpath=".//pre:thing"/>
<xsd:field xpath="@code"/>
</xsd:key> <xsd:keyref name="thingKeyRef" refer="pre:thingKey">
<xsd:selector xpath=".//pre:thingRef"/>
<xsd:field xpath="@id"/>
</xsd:keyref>...
</xsd:schema>
does. Shouldn't the case with the default namespace behave the same as the case with the explicit namespace?
Any insight would be appreciated,
-Joe
smime.p7s
Description: S/MIME Cryptographic Signature
