← Prev in month ← Prev in thread

Re: [xml-dev] The awesome power of Schematron: using user-defined XSLT functions in Schematron

From
G. Ken Holman <>
To
"Costello, Roger L." <>, "" <>
Date
2016-06-17T15:12:12Z
ID
<>
Thread
Re: [xml-dev] The awesome power of Schematron: using user-defined XSLT functions in Schematron
At 2016-06-17 14:43 +0000, Costello, Roger L. wrote:
>Did you know that Schematron rules and assertions can call 
>user-defined XSLT functions?

Only when the Schematron expression is implemented using XSLT.

>That capability enormously enhances the power of Schematron.

Only when the Schematron expression is implemented using XSLT.

>It brings the power of a programming language to the task of 
>validating XML instances.

Only when the Schematron expression is implemented using XSLT.

There are many implementations of Schematron, Roger.  Not all of them 
are in XSLT:

   http://schematron.com/links.html

The implementations in C++, Python, Java and Perl that are listed 
there will not have access to a user-defined XSLT function that you define.

And when Schematron with XSLT is deployed in environments where there 
are a lot of users, it can be a burden on the servers.  This isn't 
always made public, but I am privy to situations where this is a big concern.

Accessing a user-defined XSLT function goes beyond the declaration 
you are making in the query language binding.  You are not creating 
portable ISO/IEC 19757-3 when you use a user-defined XSLT function.

Section 3.17 defines the query language binding as:

named set, specified in a document called a Query Language Binding, 
of the languages and conventions used for assertion tests, 
rule-context expressions and so on, by a particular Schematron implementation

The first note does allow for other query language bindings, but 
section 6.4 lists only: stx, xslt, xslt1.1, exslt, xslt2, xpath, 
xpath2, xquery.  Annex C specifies the default query language bind to be XSLT.

When you use a user-defined XSLT function, then you aren't using any 
of those query language bindings.  So if you are not declaring your 
custom use of XSLT, then your Schematron expression is not conformant.

There will be better and faster implementations of Schematron and 
they won't necessarily be implemented using an XSLT base that 
provides for user-defined XSLT functions.  They will have to support 
the default query language binding of the XSLT/XPath function 
library, but that does not include user-defined functions.

So I think you should temper your enthusiasm about this.  Yes, what 
you want to do can work in an isolated non-conformant implementation 
of Schematron using an XSLT basis that has user-defined functions 
defined.  Sure.  The spec allows you to have any query language 
binding you want, and you want a custom one that is not one of the 
standard ones ... so you better declare that in your 
Schematron.  Looking at your Schematron you declare:

   queryBinding="xslt2"

... and you are lying about that.  Your Schematron is not conformant.

So please don't tell the world that this non-conformant behaviour is 
built in to Schematron, because it isn't.

. . . . . . . . Ken


--
Check our site for free XML, XSLT, XSL-FO and UBL developer resources |
Streaming hands-on XSLT/XPath 2 training @US$45: http://goo.gl/Dd9qBK |
Crane Softwrights Ltd. _ _ _ _ _ _ http://www.CraneSoftwrights.com/x/ |
G Ken Holman _ _ _ _ _ _ _ _ _ _ mailto: |
Google+ blog _ _ _ _ _ http://plus.google.com/+GKenHolman-Crane/posts |
Legal business disclaimers: _ _ http://www.CraneSoftwrights.com/legal |


---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus
← Prev in month ← Prev in thread