If you had described it as an XPath question then it would be on-topic, and
therefore I hope Tommie won't yell at me if I answer it!
<xs:assert test="every $cont in cont:contestant[position() lt last()]
satisfies
$cont/@seed lt
$cont/following-sibling::cont:contestant[1]/@seed"/>
I wrote the assert without the namespace prefix cont: which did not work. Any
explication way I need to prefix here even though the default namespace is
the same namespace and I can reference to an element without prefixing.
XSD 1.1 Part 1 §3.13.6.2 says:
2.2.3 The default element/type namespace
<http://www.w3.org/TR/xpath20/#dt-def-elemtype-ns> is the {default namespace}
<https://www.w3.org/TR/xmlschema11-1/#x-default_namespace> of X.
§3.13.2 defines how {default namespace} is established:
Let D be the ·actual value· <https://www.w3.org/TR/xmlschema11-1/#key-vv> of
the xpathDefaultNamespace [attribute]
<http://www.w3.org/TR/xml-infoset/#infoitem.element>, if present on the host
element, otherwise that of the xpathDefaultNamespace [attribute]
<http://www.w3.org/TR/xml-infoset/#infoitem.element> of the <schema>
<https://www.w3.org/TR/xmlschema11-1/#element-schema> ancestor. Then the value
is the appropriate case among the following:
1 If D is ##defaultNamespace, then the appropriate case among the following:
1.1 If there is an entry in the [in-scope namespaces]
<http://www.w3.org/TR/xml-infoset/#infoitem.element> of the host element whose
[prefix] <http://www.w3.org/TR/xml-infoset/#infoitem.namespace> is ·absent·
<https://www.w3.org/TR/xmlschema11-1/#key-null>, then the corresponding
[namespace name] <http://www.w3.org/TR/xml-infoset/#infoitem.namespace>;
1.2 otherwise ·absent· <https://www.w3.org/TR/xmlschema11-1/#key-null>;
2 If D is ##targetNamespace, then the appropriate case among the following:
2.1 If the targetNamespace [attribute]
<http://www.w3.org/TR/xml-infoset/#infoitem.element> is present on the <schema>
<https://www.w3.org/TR/xmlschema11-1/#element-schema> ancestor, then its
·actual value· <https://www.w3.org/TR/xmlschema11-1/#key-vv>;
2.2 otherwise ·absent· <https://www.w3.org/TR/xmlschema11-1/#key-null>;
3 If D is ##local, then ·absent·
<https://www.w3.org/TR/xmlschema11-1/#key-null>;
4 otherwise (D is an xs:anyURI value) D.
Now, you don't have an xpathDefaultNamespace attribute on either the xs:assert
element or the xs:schema element, so I think we have to conclude that {default
namespace} is "absent", so the default element/type namespace in the XPath
static context is absent.
XPath 2.0 §2.1.1 says (under Default element/type namespace) "The namespace
URI, if present, is used for any unprefixed QName appearing in a position where
an element or type name is expected.]"
By implication (and I agree it's not very explicit) if you don't define an
xPathDefaultNamespace then an unprefixed QName is taken as being in no
namespace.
There's certainly nothing (other than intuition, which in this case is
incorrect) to suggest that an unprefixed QName should be in the default
namespace that's in-scope for the xs:assert element.
Michael Kay
Saxonica
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--