Subject: Re: [xsl] Schema validation on a function parameter From: "Matthieu RICAUD-DUSSARGET m.ricaud-dussarget@xxxxxxxxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Mon, 12 Feb 2018 17:52:01 -0000 |
Thank you Michael, With the copy and the function this will be quite transparent to the developers, meaning it's quite easy to validate params of a function. First time I need this actualy, but I'll consider moving this to a common function in our lib. Regards, Matthieu -----Message d'origine----- De : Michael Kay mike@xxxxxxxxxxxx [mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx] Envoyi : lundi 12 fivrier 2018 18:19 @ : xsl-list@xxxxxxxxxxxxxxxxxxxxxx Objet : Re: [xsl] Schema validation on a function parameter You can simplify it a little to <xsl:function name="my:function"> <xsl:param name="e" as="element()"/> <xsl:variable name="e" as="schema-element(my:element)"> <xsl:copy-of select="$e" validation="strict"/> </xsl:variable> ... do something here </xsl:function> If you do this a lot you could also try <xsl:function name="my:validate" as="element(*, xs:anyType)"> <xsl:param name="e" as="element()"/> <xsl:variable name="e" as="schema-element(*, xs:anyType)"> <xsl:copy-of select="$e" validation="strict"/> </xsl:variable> </xsl:function> <xsl:function name="my:function"> <xsl:param name="e" as="element()"/> ... do something here with my:validate($e) </xsl:function> Michael Kay Saxonica > On 12 Feb 2018, at 12:07, Matthieu RICAUD-DUSSARGET m.ricaud-dussarget@xxxxxxxxxxxxxxxxxx <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > > Hi ! > > I have a function which takes an element as parameter. > I want to validate this element against an xsd schema type definition. > > I'm using XSLT 3.0 with a schema aware processor (SaxonEE 9.7.0.15) > > At first, I thought I only have to : > <xsl:import-schema schema-location="my-schema.xsd"/> And then type the > parameter: > <xsl:param name="e" as=" schema-element(my:element)"/> But it does not > validate (when the xml in not valid I don't get any errors or > warnings) > > Then after reading the XSLT 3.0 spec, I realized validation is processed only on source or result-tree: > "The imported type definitions can be used for temporary nodes or for nodes on a result tree just as much as for nodes in source documents" > > So I found this solution : > > <xsl:import-schema schema-location="my-schema.xsd"/> > > <xsl:function name="my:function"> > <xsl:param name="e" as="element()"/> > <xsl:variable name="e" as="document-node(schema-element(my:element))"> > <xsl:document validation="strict"> > <xsl:sequence select="$e"/> > </xsl:document> > </xsl:variable> > ... do something here > </xsl:function> > > This works pretty well, I actualy get a fatal error with its description when $e is not valid, which is exactly what I was looking for. > > Any advices, comment on this, is it a good way to do ? or there is > something more obvious which I missed (preventing creating this > document-node for example?) > > Thanks in advance, > Cheers > Matthieu
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Schema validation on a fu, Michael Kay mike@xxx | Thread | Re: [xsl] Schema validation on a fu, Michael Kay mike@xxx |
Re: [xsl] Schema validation on a fu, Michael Kay mike@xxx | Date | Re: [xsl] Schema validation on a fu, Michael Kay mike@xxx |
Month |