RE: [xsl] XSD Validation with XSLT

Subject: RE: [xsl] XSD Validation with XSLT
From: "Robert Soesemann" <rsoesemann@xxxxxxxxxxx>
Date: Fri, 10 Dec 2004 10:33:56 +0100
Hello Michael,

Although this might be a good idea, I can't really go that way, because
I want to do this without writing any custom code (e.g. Java handling
Exceptions)

Couldn't I just use document() to compare the current document with the
XSDs requirements?

Thanks in advance,

Robert

-----Original Message-----
From: Michael Kay [mailto:mike@xxxxxxxxxxxx]
Sent: Freitag, 10. Dezember 2004 10:27
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: RE: [xsl] XSD Validation with XSLT


Interesting! XSLT 2.0 takes you some of the way there, but not the whole
way.

You can validate an individual employee element in XSLT 2.0 like this:

<xsl:template match="employee">
  <xsl:copy-of select="." validation="strict"/>
</xsl:template>

but this leaves open the question of what happens if validation fails.
According to the spec, any validation failure is a fatal error. Saxon
has a switch (-vw on the command line) to treat validation failures
instead as warnings. What it does in such cases is to notify the JAXP
ErrorListener of the failure, and insert a comment into the output file
to describe the validation error. It wouldn't be too difficult to go one
step further and call some kind of user hook to attempt a repair - at
least in particular well-defined cases.

(This needs the schema-aware version of Saxon, of course)

Michael Kay
http://www.saxonica.com/

> -----Original Message-----
> From: Robert Soesemann [mailto:rsoesemann@xxxxxxxxxxx]
> Sent: 10 December 2004 08:42
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] XSD Validation with XSLT
>
> Hello,
>
> I guess my question might seem somewhat strange. The context
> is, that I
> need to bring in content into a CMS that will validate it againts XML
> Schema files. Some of the XML files that I want to import might not
> provide data where the datamodel of the CMS might require this.
>
> My idea was to validate the input against a xsd *by means of XSLT*.
> This would *not need to validate the whole structure but only test
> whether elements with unique names have a value or not. I a required
> field is found to be empty a predefined value should be inserted.
> (e.g. a -1 for xs:integer or n/a for xs:string)
>
> To give you an example of my structure:
> XML:
> ----
> <employee>
> 	<name>Tom</name>
> 	<id></id>				<-- is required
> 	<managedBy>Hans<managedBy>		<-- is required
> 	<manages>Frank</manages>
> </employee>
>
> XSD:
> ----
> <xs:element name="employee">
> 		<xs:complexType>
> 			<xs:choice minOccurs="0" maxOccurs="1">
> 				<xs:element name="name"
> type="xs:string"/>
> 				<xs:element name="id" type="xs:string"
> minOccurs="1"/>
> ...
>
>
> OUTPUT:
> -------
> <employee>
> 	<name>Tom</name>
> 	<id>n/a</id>				<-- is required
> 	<managedBy>Hans<managedBy>		<-- is required
> 	<manages>Frank</manages>
> </employee>
>
> Any help is very welcome.
>
> Robert

Current Thread