Re: [xsl] Need an XPath expression which returns all xs:pattern elements containing a regex that permits an unbounded number of characters

Subject: Re: [xsl] Need an XPath expression which returns all xs:pattern elements containing a regex that permits an unbounded number of characters
From: "Piez, Wendell A. (Fed) wendell.piez@xxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Thu, 4 Apr 2024 14:38:08 -0000
Holla again,

With every reason to trust David C, nonetheless wouldn't it be fine if we
could, say, set up a bunch of unit tests to actually determine which of these
subtle incantations do as we think they do?

An XSpec sheet could be wired to test both regex-based and parsing-based
solutions as implemented in XSLT, to give Roger the confidence he needs in his
approach.

I jump in to mention of XSpec mainly because these questions are surrounded by
the problem of what's "easy". It depends. Maybe paper-napkin analysis followed
by some interactive free-form testing is good enough.

Cheers, Wendell

From: David Carlisle d.p.carlisle@xxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Sent: Thursday, April 4, 2024 10:21 AM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: [xsl] Need an XPath expression which returns all xs:pattern
elements containing a regex that permits an unbounded number of characters



On Thu, 4 Apr 2024 at 14:48, Willem Van Lishout
willemvanlishout@xxxxxxxxx<mailto:willemvanlishout@xxxxxxxxx>
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx<mailto:xsl-list-service@xxxxxxxxxxxx
rytech.com>> wrote:
Is this even possible, theoretically speaking? As soon as you start using
lookaheads, square brackets, and so on, your patterns will likely fail. I
don't think regex can parse regex.



I don't think the regex needs to be parsed here: you can destructively
normalise it before testing eg
replace ( replace(replace(,.'\s','') , '\\.' , 'x'), `\{-0-9]*,\}`,'*`)

would get rid of all white space, replace  \-quoted characters by x and  a{
99, } constructs by a*
which should simplify looking for * and +

David

4 Apr 2024, at 20:15, "David Carlisle
d.p.carlisle@xxxxxxxxx<mailto:d.p.carlisle@xxxxxxxxx>"
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx<mailto:xsl-list-service@xxxxxxxxxxxx
rytech.com>> wrote:


On Thu, 4 Apr 2024 at 13:29, Roger L Costello
costello@xxxxxxxxx<mailto:costello@xxxxxxxxx>
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx<mailto:xsl-list-service@xxxxxxxxxxxx
rytech.com>> wrote:
Hi Folks,

I want to find, in an XML Schema, all xs:pattern elements containing a regex
that permits an unbounded number of characters.

Here are examples of xs:pattern elements that I want to find:

<xs:pattern value="A*"/>
<xs:pattern value="A+"/>
<xs:pattern value="A{0,.}"/>
<xs:pattern value="A{1,.}"/>


How to fix my XPath expression? Is the solution to add a second predicate:

xs:pattern[
        contains(@value, '*') or
        contains(@value, '+') or
        contains(@value, '{1,}') or
        contains(@value, '{0,}')
    ][
        not(contains(@value, '\*')) and
        not(contains(@value, '\+'))
    ]

Is that correct?

No.

A  pattern \\*   matches an unbounded list of backslashes  but fails your test
as it contains \*
A pattern X{5,}  matches an unbounded list  of X of at least 5 but doesn't
match your first predicate.




XSL-List info and archive<http://www.mulberrytech.com/xsl/xsl-list>
EasyUnsubscribe<http://lists.mulberrytech.com/unsub/xsl-list/3166594> (by
email)
XSL-List info and archive<http://www.mulberrytech.com/xsl/xsl-list>
EasyUnsubscribe<http://lists.mulberrytech.com/unsub/xsl-list/2739265> (by
email)
XSL-List info and archive<http://www.mulberrytech.com/xsl/xsl-list>
EasyUnsubscribe<http://lists.mulberrytech.com/unsub/xsl-list/3302254> (by
email<>)

Current Thread