xsl-list
[Top] [All Lists]

Re: [xsl] XPath 1.0 challenge: select all XML Schema element declarations with type string

2015-07-24 12:44:58

On 24 Jul 2015, at 18:28, Costello, Roger L. costello(_at_)mitre(_dot_)org 
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> wrote:

Thanks for the outstanding responses.

Let's summarize:

1. The problem cannot be solved in XPath 1.0. 

2. XPath 1.0 is not "relationally complete" in Codd's sense.

3. The following two XPath expressions come close to solving the problem. 
However, sometimes they return an element which should not be returned and 
sometimes they don't return an element which should be returned.

(a) //xs:element[(@type = 'string') or (substring-after(@type, ':') = 
'string')]

(b) //xs:element[@type= concat(substring-before(name(),'element'),'string')]

I must use XPath 1.0.  So which of those two XPath expressions would you 
recommend I use? 

Michael says that (b) is a 99.9% solution. Is (a) less than, greater than, or 
equal to 99.9%? That is, which of (a) or (b) will work correctly most often?


None of us can possibly know.

(a) will fail if there’s a user-defined type with local-name “string”

(b) will fail if there are two different prefixes bound to the XSD namespace.

Normally I would have said (b) is highly improbable; but in fact, it’s not 
uncommon to do this, especially in XSD documents: perhaps because the default 
namespace is available in element names and QName-valued attributes, but not in 
expressions used within xsl:key, xsl:unique, and xsl:assert.

Incidentally neither expression correctly handles an @type attribute that 
contains leading or trailing whitespace - but I’ve only ever seen that in 
artificial test cases.

Generally, user-written code that attempts to extract information from schema 
documents without putting them through a real schema compiler is rife with such 
errors. It’s a similar crime to parsing XML using regular expressions rather 
than an XML parser. But if you only want code that works most of the time, it’s 
fine.

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>