RE: [xsl] Validating source documents, with schema aware XSLT

Subject: RE: [xsl] Validating source documents, with schema aware XSLT
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Sun, 6 Aug 2006 21:20:49 +0100
> The source XML is books.xml, and Schema is books.xsd found in 
> the folder samples\data of Saxon distribution.
> 
> The example works fine with the following command line:
> 
> java com.saxonica.Transform -val books.xml books.xsl
> 
> The source document gets validated, and I get the proper output.
> 
> However, I am curious what is happening in the following cases:
> 
> 1) I give the command line as, java com.saxonica.Transform 
> books.xml books.xsl (i.e. no -val option)
> 
> The following message comes from the stylesheet:
> 
> Source document is not a validated book list

The "instance of" test fails because it is testing the type annotation of
the element node, and the type annotation is "xs:untyped" if the document
has not been validated.
> 
> 2) I give the command line as, java com.saxonica.Transform 
> -val books.xml books.xsl
> 
> but I remove the line <xsl:import-schema schema-location="books.xsd"
> /> from the stylesheet,
> 
> I get message,
> 
> XPST0003: XPath syntax error at char 42 on line 4 in {...e of 
> schema-element(B
> OOKLIS...}:
> No schema has been imported for namespace ''

You can't use the name of a schema-defined type in your stylesheet unless
you import the schema. The "instance of" test won't even compile in this
situation; it never gets as far as reading the source document.
> 
> According to my testing, it seems that to validate source 
> document, -val option is a must, and also xsl:import-schema 
> is a must to include in the stylesheet. i.e. both these 
> conditions must be fulfilled for the source document to get 
> validated by the schema, and is usable by the stylesheet.

-val is necessary to create the type annotations; import-schema is necessary
to refer to the type in your stylesheet.
Michael Kay
http://www.saxonica.com/

Current Thread