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

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature



Reply via email to