Page 1 of 1

Schematron complains about AVT for xml:id Attribute

Posted: Fri Dec 21, 2018 10:15 am
by fsteimke
Hi,
i am writing an XSLT 3.0 stylesheet for documentation (in docbook) of relax ng grammars. There is a function called rng:define-id (rng:define) which computes, for a given rng:define element, the value of the corresponding id attribute. The function has this signature:

Code: Select all

<xsl:function name="rng:define-id" as="xs:ID">
Transformation of a rng:define element into a docbook section should be done with a template like this:

Code: Select all

 <section xmlns="http://docbook.org/ns/docbook" xml:id="{rng:define-id(.)}">
However, Validation of the XSLT Stylesheet shows an error with the AVT for the xml:id attribute: The value '{rng:define-id(.)}' is not a valid xs:ID

The error will vanish when i use an explicit xsl:attribute element instead:

Code: Select all

<xsl:attribute name="xml:id" select="rng:define-id(.)"/>
It will also vanish when i use any other name für the attribute (xml:bid for example).

Is it illegal to use attribute value template for an xml:id attribute in xslt/xpath 3.0? Or is it a bug in the validation of xslt Stylesheets?

Sincerely,
Frank

Re: Schematron complains about AVT for xml:id Attribute

Posted: Sat Dec 22, 2018 7:18 am
by fsteimke
Sorry, i forgot the info about Oxygen Version and Environment:
<oXygen/> XML Editor 20.1, build 2018061313 with Windows 10

Frank Steimke

Re: Schematron complains about AVT for xml:id Attribute

Posted: Mon Dec 24, 2018 11:48 am
by Radu
Hi Frank,

If you send us via email (support@oxygenxml.com) a small sample set of files (XML + XSLT) we could try to take a look on our side, see if it's a problem in the additional Schematron rules we created to validate XSLT.
Do both approaches work when actually applying the XSLT on the XML?

Regards,
Radu

Re: Schematron complains about AVT for xml:id Attribute

Posted: Thu Dec 27, 2018 6:01 pm
by fsteimke
Hi Radu,

i tried to reproduce on another computer (but same Oxygen Version, i think) and failed at first.

The error appeared again when i checked the "Use Saxon-EE (schema-aware) for xslt2 query language binding" option in XML / XML Parser / Schematron.

Since the XSLT Script does not compile (when this option is checked), i'm unable to apply it to any XML input.

I think this bug is not crucial since there is allways the workaround with an explicit <xsl:attribute ... /> expression.

Thanks,
Frank

Re: Schematron complains about AVT for xml:id Attribute

Posted: Fri Dec 28, 2018 8:54 am
by Radu
Hi Frank,

Thanks for the details, now I can reproduce the problem on my side and I will add an internal issue for it.
We have a couple of extra Schematron-based validation steps when validating an XSLT stylesheet and one of those steps is the one which complains about this.
If you want to bypass this extra validation stage on your side, in the Oxygen Preferences->"Document Type Association" page you can Extend the "XSLT" document type association and in the Validation tab you can edit the default XSLT validation scenario and remove from it the last 3 stages which are all Schematron-based.

Regards,
Radu

Re: Schematron complains about AVT for xml:id Attribute

Posted: Wed Jan 09, 2019 11:06 am
by tavy
Hi Frank,

When an XSLT is validated using Schematron, the XSLT is considered to be an XML document. Therefore, the attribute value template from the value of the "xml:id" attribute ({rng:define-id(.)}) will not be evaluated, and it is not a valid xs:ID. I think it is correct to get this error if you validate the XSLT with Schematron and Saxon-EE (schema-aware).

Best Regards,
Octavian Nadolu

Re: Schematron complains about AVT for xml:id Attribute

Posted: Fri Jan 25, 2019 8:43 am
by fsteimke
Hi Octavian,

ok, i see the problem. This is interesting. I was wrong assuming that schematron complains the AVT. It is, in fact, the Saxon engine which complains about the XSLT Stylesheet which results from compilation of Schematron as beeing invalid XML.

Attribute value templates are defined in section 5.6.1 of the XSLT 3.0 Spec. Its a XSLT feature. What i understand from your explanation means that the use of this feature may -under specific circumstances - lead to Stylesheets which are invalid XML files. This surprises me. But of course the XML validation engine does not know anything about this XSL feature called AVT.

The next interesting and very surprinsing observation is, that the XSLT file (result of compiling Schematron to XSLT) with AVT in places, where an xsd:ID type is expected, runs perfectly well although it is a technically invalid XML file. The XSLT engine loads the invalid XML file, silently replacingthe string within curly brackets by its value at runtime. As described in section 5.6.1 of the spec, thereby correcting the error.

I would expect that the XSLT Specification explains this situation, but i can't find it.

Once again,
thanks for the explanation

Re: Schematron complains about AVT for xml:id Attribute

Posted: Mon Jan 28, 2019 10:04 am
by tavy
Hi Frank,

In fact Saxon complains about the validation of the XSLT file with Schematron, because the validation with Schematron is schema-aware and the XSLT (that is just an XML for this validation) has an invalid "xml:id" attribute value. The validation of the XSLT with Schematron it is not always perfect, but impose some quality assurance rules for the XSLT. These rules will detect when variable or parameter names conflict with names of elements or attributes used in XPath expressions and issue a warning, or inform the user to add documentation for templates and functions

You can deactivate them from Oxygen Preferences->"Document Type Association" page you can Extend the "XSLT" document type association and in the Validation tab you can edit the default XSLT validation scenario and remove from it the last 3 stages which are all Schematron-based.

Best Regards,
Octavian