[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

RE: [xsl] How to check an element's type against an XSD simpleType and skip that element if it does not conform to the simpleType?


Subject: RE: [xsl] How to check an element's type against an XSD simpleType and skip that element if it does not conform to the simpleType?
From: "Costello, Roger L." <costello@xxxxxxxxx>
Date: Mon, 15 Jul 2013 19:41:54 +0000

>    test="string(bk:ISBN) instance of bk:ISBN-type">

Thanks Ken, I see what you're saying.

I gave that a try (I replaced data with string). Unfortunately, I get the same
error message.

/Roger

-----Original Message-----
From: G. Ken Holman [mailto:g.ken.holman@xxxxxxxxx] On Behalf Of G. Ken
Holman
Sent: Monday, July 15, 2013 3:16 PM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx; xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: [xsl] How to check an element's type against an XSD simpleType
and skip that element if it does not conform to the simpleType?

At 2013-07-15 18:55 +0000, Costello, Roger L. wrote:
>The item of interest, however, is this snippet:
>
>             <xsl:for-each select="/bk:BookStore/bk:Book">
>                 <xsl:if test="data(bk:ISBN) instance of bk:ISBN-type">
>                     <ISBN><xsl:value-of select="bk:ISBN"/></ISBN>
>                 </xsl:if>
>             </xsl:for-each>
>
>The for-loop iterates through each Book and checks to see if the
>value of its ISBN element conforms to ISBN-type; if it doesn't
>conform, then it skips that ISBN and goes to the next Book.
>
>In the XML document shown above, the Book element has an ISBN
>(xxx1-56592-235-2) that is not valid, so I expect my XSLT program to skip
it.
>
>However, that is not happening. I get this error message:
>
>     The content "xxx1-56592-235-2" of element <ISBN> does not
>     match the required simple type. Value "xxx1-56592-235-2"
>     contravenes the pattern facet "\d{1}-\d{5}-\d{3}-\d{1}|\d{1}-..."
>     of the type ISBN-type

Yep!  Because I think you are taking one step too far.  I haven't
tested it, but I think this will work for you:

    test="string(bk:ISBN) instance of bk:ISBN-type">

>What am I doing wrong please?

You are enforcing the schema constraint by using data() before
checking that the content conforms to the constraint.  In my code I'm
simply getting the value as a string, thus not imposing any
constrains, and then checking that string to be convertible to the
said constraints.

Please let me know if that works for you.

I hope it helps.

. . . . . . . Ken

--
Public XSLT, XSL-FO, and UBL classes in the Netherlands     Oct 2013 |
Public XSLT, XSL-FO, UBL and code list classes in Australia Oct 2013 |
Contact us for world-wide XML consulting and instructor-led training |
Free 5-hour lecture: http://www.CraneSoftwrights.com/links/udemy.htm |
Crane Softwrights Ltd.            http://www.CraneSoftwrights.com/s/ |
G. Ken Holman                   mailto:gkholman@xxxxxxxxxxxxxxxxxxxx |
Google+ profile: https://plus.google.com/116832879756988317389/about |
Legal business disclaimers:    http://www.CraneSoftwrights.com/legal |


Current Thread
Keywords