Michael Kay wrote:
you could read an (unvalidated) BOOKLIST and then iterate
over the BOOK elements, validating each one in turn, catching
any errors ... and then doing different processing based on
whether the BOOK was valid or not.
I must not be understanding what you and David are suggesting. Below is an XSLT
program which does (I think) what you guys are suggesting, but it still
generates an error if the XML document has an ISBN element with a value that is
not schema-valid. What is my XSLT program doing wrong? /Roger
-----------------------------------------------------------------
Check ISBN using "castable as"
-----------------------------------------------------------------
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:bk="http://www.books.org"
exclude-result-prefixes="bk"
version="2.0">
<xsl:output method="xml"/>
<xsl:import-schema namespace="http://www.books.org"
schema-location="BookStore.xsd"/>
<xsl:template match="/">
<BookISBNs>
<xsl:for-each select="/bk:BookStore/bk:Book/bk:ISBN">
<xsl:if test=". castable as bk:ISBN-type">
<ISBN><xsl:value-of select="."/></ISBN>
</xsl:if>
</xsl:for-each>
</BookISBNs>
</xsl:template>
</xsl:transform>
-----Original Message-----
From: Michael Kay [mailto:mike(_at_)saxonica(_dot_)com]
Sent: Tuesday, July 16, 2013 8:56 AM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Cc: Costello, Roger L.
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?
On 16 Jul 2013, at 13:29, David Carlisle wrote:
On 16/07/2013 13:07, Costello, Roger L. wrote:
Michael Kay wrote:
Unfortunately schema-aware processing in XQuery and XSLT doesn't
give you this capability.
Is there a workaround?
Is there is no way for an XSLT program to express: "Hey, validate xyz
against the XML Schema and if xyz is not schema-valid then discard
it." No way to express that?
Can't you just not validate the input, then test within the stylesheet
as you are testing an atomic/simple type.
Yes, in fact you could do it at a different granularity; you could read an
(unvalidated) BOOKLIST and then iterate over the BOOK elements, validating each
one in turn, catching any errors using try/catch, and then doing different
processing based on whether the BOOK was valid or not.
Michael Kay
Saxonica
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--