- From: Henry S. Thompson <ht@cogsci.ed.ac.uk>
- Date: 19 Feb 2001 13:36:51 +0000
- To: "Andy Clark" <andyclar@us.ibm.com>
- Cc: Jim Trezzo <jim.trezzo@oracle.com>, www-xml-schema-comments@w3.org, "Trezzo,Jim" <JTREZZO@US.ORACLE.COM>
"Andy Clark" <andyclar@us.ibm.com> writes:
> The subset of XPath proposed for XML Schema by the working group does not
> go far enough in limiting the allowed expressions. In fact, further
> thoughts on the problem make me wonder whether using XPath at all for
> identity constraints in Schema is a good idea. The following problems
> highlight some of my concerns.
>
> Problem 1: Qualifying Elements and Attributes
>
> I asked for a clarification on this issue from the general XML Schema
> community on the xmlschema-dev mailing list with no response. Perhaps I can
> get a response from the www-xml-schema-comments readers.
>
> The problem involves an inconsistency between how element names are
> referenced when the grammar specifies a target namespace. In this case, all
> references to elements must be fully qualified. For example:
>
> <schema xmlns='...' targetNamespace='NS' xmlns:a='NS'>
> <element name='foo'>
> <...>
> <element ref='a:bar'/>
> </...>
> </element>
> <element name='bar'>
> <.../>
> </element>
> </schema>
>
> However, an example of using identity constraints in the primer (report.xsd
> in section 5) does *not* qualify the XPaths used when defining selectors
> and fields. For example:
>
> <schema xmlns='...' targetNamespace='NS' xmlns:a='NS'>
> <element name='foo'>
> <.../>
> <unique>
> <selector xpath='bar'/>
> <field xpath='@baz'/>
> </unique>
> </element>
> <.../>
> </schema>
As Martin correctly pointed out, this is a primer bug and has been
fixed. Sorry for the confusion. XPath expressions in
fields/selectors are interpreted as per XPath 1.0, so to match
qualified names in the document, prefixes are required in the XPath
expression.
> Problem 2: Ambiguous Element Step
>
> Allowing the use of the descendant:: axis in XPaths used for selectors and
> fields has several problems. The first relates to the ability of
> implementations to support identity constraints in an efficient manner.
> Without this axis, implementation of identity constraints is both
> straightforward and efficient (even for streaming XML such as SAX).
> However, allowing the descendant axis complicates the implementation for
> serial processors.
I don't understand this point. Implementing the .//name is trivial in
streaming mode, and corresponds exactly to what you already have to do
to implement ID/IDREF.
> The second problem relates to the fact that field values must be compared
> in the value space based on the attribute/element's datatype. However, the
> descendant axis introduces ambiguity. For example:
>
> <element name='foo'>
> <...>
> <element name='bar'>
> <...>
> <element name='bar'/>
> </...>
> </element>
> </...>
> <unique>
> <selector xpath='.//bar'/>
> <field xpath='@baz'/>
> </unique>
> </element>
>
> Which bar element does the selector match? Both bar elements could declare
> a baz attribute with different types.
It matches both, that's the whole point of having a scoped selector.
And what's the problem, anyway? You've asserted by the above that
'bar' elements are unique wrt their 'baz' attribute's value. So you
keep a table of bar attribute's 'baz' attribute's values, and throw an
error if you hit one twice. Seems straightforward to me.
ht
--
Henry S. Thompson, HCRC Language Technology Group, University of Edinburgh
W3C Fellow 1999--2001, part-time member of W3C Team
2 Buccleuch Place, Edinburgh EH8 9LW, SCOTLAND -- (44) 131 650-4440
Fax: (44) 131 650-4587, e-mail: ht@cogsci.ed.ac.uk
URL: http://www.ltg.ed.ac.uk/~ht/
Received on Monday, 19 February 2001 08:36:59 UTC