It’s
time to remember that
default namespaces do not apply to
XPath expressions, and that a
prefix needs to be defined
for each namespace used in the XPath expressions of the
xs:unique
,
xs:key
, and
xs:keyref
declarations!
A prefix declaration is therefore required to write expressions that
reference qualified elements and attributes, even if the target
namespace is defined as the default namespace. It’s
also important to notice that the
xs:keyref
refer
attribute is a
QName
that needs to be prefixed, and a
xs:key
/
xs:keyref
on the authors in (in our previous
example) with a namespace could become:
<xs:schema targetNamespace="http://dyomedea.com/ns/library" elementFormDefault="qualified" attributeFormDefault="unqualified" xmlns:lib="http://dyomedea.com/ns/library" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="library"> <xs:complexType> <xs:sequence> <xs:element name="book" type="lib:bookType" maxOccurs="unbounded"/> <xs:element name="author" type="lib:authorType" maxOccurs="unbounded"/> <xs:element name="characters" type="lib:characterType" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xs:key name="author"> <xs:selector xpath="lib:author"/> <xs:field xpath="@id"/> </xs:key> <xs:keyref name="keyref" refer="lib:author"> <xs:selector xpath="lib:book/lib:author-ref"/> <xs:field xpath="@ref"/> </xs:keyref> </xs:element> </xs:schema>