I have no easy way to test it, but I think your expression could be simplified,
ie.
test="if (matches(string(@target), '.*')) then true() else false()"
seems to be the same as
test="matches(string(@target), '.*'))"
I've checked the following URL:
http://www.w3.org/TR/xquery-operators/#func-matches
and it seems that "matches" returns xs:boolean:
fn:matches($input as xs:string?, $pattern as xs:string) as xs:boolean
Summary: The function returns true if $input matches the regular expression
supplied as $pattern as influenced by the value of $flags, if present;
otherwise, it returns false.
Best regards,
Dawid
W dniu 17.04.2013 19:28, Jim Barnett pisze:
Mukul,
Yes, that fixed it. Thank you for your prompt reply.
- Jim
-----Original Message-----
From: Mukul Gandhi [mailto:muk...@apache.org]
Sent: Wednesday, April 17, 2013 12:26 PM
To: j-users@xerces.apache.org
Subject: Re: regular expression matching in <assert>
Hi Jim,
Thanks for sending across the schema and XML instance documents. I looked
at the schema document you've shared.
The following fix seems to work for your problem <assert>,
<xsd:assert test="if (matches(string(@target), '.*')) then true() else false()"
xpathDefaultNamespace="##targetNamespace"/>
i.e, we use a string() function around attribute node @target. The 'target'
attribute within your schema has type annotation of xsd:IDREFS, therefore we
seem to need this workaround.
On Wed, Apr 17, 2013 at 9:06 PM, Jim Barnett <jim.barn...@genesyslab.com> wrote:
Mukul,
Thanks for your response. I've attached a sample schema and test file (the schema is
edited down from a much larger document, so it's structure may not make much sense.) The
problem is in the <assert> in line 74 of the schema. (The simpler <assert> in
line 73 works properly.)
I suspect that you may be right about there being a namespace problem,
because the <assert> in line 74 fails even if I wrap not() around it.
So both
<xsd:assert test="if (matches(@target, '.*')) then true() else
false()" xpathDefaultNamespace="##targetNamespace"/>
And
<xsd:assert test="if not((matches(@target, '.*'))) then true() else
false()" xpathDefaultNamespace="##targetNamespace"/>
both fail, which makes it look like the processor is not finding the matches()
function.
The 'xpathDefaultNamespace="##targetNamespace"' attribute is something I
stumbled across when trying to get some other assertions to work, but I admit that I
don't really understand what effects it may be having.
Thank you for your help.
- Jim
--
Regards,
Mukul Gandhi
---------------------------------------------------------------------
To unsubscribe, e-mail: j-users-unsubscr...@xerces.apache.org
For additional commands, e-mail: j-users-h...@xerces.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: j-users-unsubscr...@xerces.apache.org
For additional commands, e-mail: j-users-h...@xerces.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: j-users-unsubscr...@xerces.apache.org
For additional commands, e-mail: j-users-h...@xerces.apache.org