[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: XSLT 2.0 *and* XSLT 1.0 validation -- how to?

Subject: Re: XSLT 2.0 *and* XSLT 1.0 validation -- how to?
From: Dimtre Novatchev <dnovatchev@xxxxxxxxx>
Date: Mon, 25 Oct 2004 06:50:09 +1000
xsi type xslt
Hi Jeni,

Thanks a lot for the very detailed and instructive reply.

I had thought about changing the namespace for the XSLT 2.0
stylesheets and decided to rely on this approach as a last resort.

And you are right -- RNG is much more elegant and useful.

Thanks for finding time to reply even during the weekend.

Dimitre.

> Right: using a schema to *validate* XSLT stylesheets isn't worthwhile
> (and that's what the subject line indicated you were asking about),
> but using a schema for other reasons (such as intellisense, or when
> querying/generating XSLT using XSLT 2.0) could be, potentially.
> 
> The usual way to get around the lack of support for co-occurrence
> constraints in WXS is to use xsi:type. So... you could design a schema
> in which there were version 1.0 and version 2.0 types for each
> element. Then use the xsi:type attribute to indicate the version
> you're using in the stylesheet. For example:
> 
> <xs:element name="stylesheet" type="stylesheet" />
> 
> <!-- general type allows anything allowed by XSLT (incorporating
>     forwards-compatibility) -->
> <xs:complexType name="stylesheet">
>  <xs:sequence>
>    <xs:element name="import" type="import"
>                minOccurs="0" maxOccurs="unbounded" />
>    <xs:choice minOccurs="0" maxOccurs="unbounded">
>      <xs:any namespace="##targetNamespace" processContents="lax" />
>      <xs:any namespace="##other" processContents="lax" />
>    </xs:choice>
>  </xs:sequence>
>  <xs:attribute name="version" use="required" type="xs:decimal" />
>  ...
> </xs:complexType>
> 
> <!-- restricted type only allows XSLT 1.0 stylesheets -->
> <xs:complexType name="stylesheet-v1.0">
>  <xs:complexContent>
>    <xs:restriction base="stylesheet">
>      <xs:sequence>
>        <xs:element name="import" type="import-v1.0"
>                    minOccurs="0" maxOccurs="unbounded" />
>        <xs:choice minOccurs="0" maxOccurs="unbounded">
>          <xs:element name="template" type="template-v1.0" />
>          ...
>          <xs:any namespace="##other" />
>        </xs:choice>
>      </xs:sequence>
>      <xs:attribute name="version" fixed="1.0" />
>    </xs:restriction>
>  </xs:complexContent>
> </xs:complexType>
> 
> <!-- restricted type only allows XSLT 2.0 stylesheets -->
> <xs:complexType name="stylesheet-v2.0">
>  <xs:complexContent>
>    <xs:restriction base="stylesheet">
>      <xs:sequence>
>        <xs:element name="import" type="import-v2.0"
>                    minOccurs="0" maxOccurs="unbounded" />
>        <xs:choice minOccurs="0" maxOccurs="unbounded">
>          <xs:element name="template" type="template-v2.0" />
>          ...
>          <xs:any namespace="##other" />
>        </xs:choice>
>      </xs:sequence>
>      <xs:attribute name="version" fixed="2.0" />
>    </xs:restriction>
>  </xs:complexContent>
> </xs:complexType>
> 
> and then use:
> 
> <xsl:stylesheet version="1.0" xsi:type="stylesheet-v1.0" ...>
> 
> in your stylesheet.
> 
> The trouble with this approach (aside from its complexity) is that
> once you use a literal result element in your stylesheet, its content
> can't be constrained based on the version of XSLT you're using. You
> could declare all the literal result elements that you use in your
> stylesheet, or you could use <xsl:element> and <xsl:attribute>
> instead.
> 
> Other possibilities are just using an XSLT 2.0 schema all the time,
> and relying on your knowledge of XSLT 1.0 to prevent you using XSLT
> 2.0 elements in an XSLT 1.0 stylesheet; or you could use a fake
> namespace for your XSLT 2.0 stylesheets (changing it on load and on
> save) and get different schemas for different stylesheets. If the
> software picks up on the xsi:schemaLocation attribute, then you could
> use that to indicate the schema that you wanted to use with a
> particular stylesheet.
> 
> If the software supports RELAX NG, you're in better luck, because you
> can use co-occurrence constraints with RNG, and wildcards in RNG are a
> lot more flexible than those in WXS.
> 
> 
> 
> Cheers,
> 
> Jeni
> 
> ---
> Jeni Tennison
> http://www.jenitennison.com/

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.