- From: Imsieke, Gerrit, le-tex <gerrit.imsieke@le-tex.de>
- Date: Tue, 08 Apr 2014 23:32:28 +0200
- To: xproc-dev@w3.org
Hi Phil, The issue seems to be that Calabash (if that's what you are using) only passes the p:with-params to the iso_svrl_for_xslt2.xsl stylesheet. Calabash relies on the default ISO Schematron implementation with XSLT2 binding for Saxon. Validation takes four passes: 1. Transform schema with iso_dsdl_include.xsl => schema with expanded inclusions 2. Transform result with iso_abstract_expand.xsl => schema with expanded abstract patterns 3. Transform result with iso_svrl_for_xslt2.xsl => XSLT 2 stylesheet 4. Apply stylesheet to document to be validated => SVRL Apparently, anything that is in a p:with-param will only be passed as an xsl:param to pass 3 (iso_svrl_for_xslt2.xsl). For example, you may specify <p:with-param name="full-path-notation" select="'2'"/> in order to get human-friendly location paths in the SVRL. If you specify <p:with-param name="allow-foreign" select="'true'"/> any xsl:* element (in particular) that you use in your schema will be forwarded to the result of step 3. Only then are you – in principle – able to supply parameters to step 4. If you use this schema (on any document): <p:validate-with-schematron name="sch" assert-valid="false"> <p:input port="schema"> <p:inline> <sch:schema xmlns:sch="http://purl.oclc.org/dsdl/schematron"> <xsl:param name="foo" select="'bar'"/> <sch:pattern> <sch:rule id="r1" context="/*"> <sch:assert test="false()">Value of param: <sch:value-of select="$foo"/> <!-- might also use xsl:value-of --> </sch:assert> </sch:rule> </sch:pattern> </sch:schema> </p:inline> </p:input> <p:input port="parameters"> <p:empty/> </p:input> <p:with-param name="allow-foreign" select="'true'"/> <p:with-param name="full-path-notation" select="'2'"/> <p:with-param name="foo" select="'baz'"/> </p:validate-with-schematron> you would see 'Value of param: baz' in the SVRL if this parameter was actually passed in step 4. But it isn’t, not by Calabash, not yet (see below). I see that this xsl:param mechanism is not exactly what you were aiming at – which is assigning an externally supplied value instead of a default value in a sch:let expression. But Schematron is not specified like that, and I'm afraid that the xsl:param mechanism will get you closest to your target. It can be enabled by inserting for (QName name : params.keySet()) { RuntimeValue v = params.get(name); transformer.setParameter(name, new XdmAtomicValue(v.getString())); } before https://github.com/ndw/xmlcalabash1/blob/saxon95/src/com/xmlcalabash/library/ValidateWithSCH.java#L154 I'm not sure whether I should send Norm a pull request for this. The spec is kind of fuzzy about how Schematron should deal with params: "The parameters port provides name/value pairs which correspond to Schematron external variables." Try to Google "Schematron external variables" and you'll probably see that it's not very well defined. So I think it is not verboten to pass the same params that have been used for step 3 also to step 4, so that people who enabled foreign markup can make use of them via xsl:param. A couple steps back to what you were trying to achieve: have you thought about reading the current file path from the input file's base-uri()? Gerrit On 08.04.2014 14:14, GOOCH, Phil wrote: > Hi all > > I am trying to set the value of a ‘let’ variable in Schematron via XProc > without success. Can anyone provide any hints? > > My Schematron has the following defined at the top: > > <letname="basedir"value="'/'"/> > <letname="mappings"value="document(concat($basedir, > 'xsl/mappings/controlled-vocab.xml'))"/> > > And I am trying to set the value of the basedir variable via the XProc task: > > <p:validate-with-schematronassert-valid="false"name="intermediate-validation"phase="intermediate"> > <p:logport="report"/> > <p:inputport="schema"> > <p:documenthref="schematron.sch"/> > </p:input> > <p:with-paramname="basedir"select="'foo/bar'"/> > </p:validate-with-schematron> > > But this fails to set the value, and basedir remains at its default value. > > Is there a way to set Schematron variables via XProc? > > Many thanks > > Phil > > *Phil Gooch* > > Senior Language Technologist > > Language Technology Group > > Global Academic Business, Dictionaries > > Oxford University Press | Great Clarendon Street | Oxford OX2 6DP > > E: phil.gooch@oup.com > > T: +44 (0)1865 354987 > > M: +44 (0)7876 881998 > > Oxford University Press (UK) Disclaimer > > This message is confidential. You should not copy it or disclose its > contents to anyone. You may use and apply the information for the > intended purpose only. OUP does not accept legal responsibility for the > contents of this message. Any views or opinions presented are those of > the author only and not of OUP. If this email has come to you in error, > please delete it, along with any attachments. Please note that OUP may > intercept incoming and outgoing email communications. > -- Gerrit Imsieke Geschäftsführer / Managing Director le-tex publishing services GmbH Weissenfelser Str. 84, 04229 Leipzig, Germany Phone +49 341 355356 110, Fax +49 341 355356 510 gerrit.imsieke@le-tex.de, http://www.le-tex.de Registergericht / Commercial Register: Amtsgericht Leipzig Registernummer / Registration Number: HRB 24930 Geschäftsführer: Gerrit Imsieke, Svea Jelonek, Thomas Schmidt, Dr. Reinhard Vöckler
Received on Tuesday, 8 April 2014 21:33:04 UTC