xsl-list
[Top] [All Lists]

Re: [xsl] Schema question

2018-01-16 05:09:53
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
--~--
<Prev in Thread] Current Thread [Next in Thread>
  • [xsl] Schema question, Leo Studer leo(_dot_)studer(_at_)varioweb(_dot_)ch
    • Re: [xsl] Schema question, Michael Kay mike(_at_)saxonica(_dot_)com <=