diff options
author | S. Solomon Darnell | 2025-03-28 21:52:21 -0500 |
---|---|---|
committer | S. Solomon Darnell | 2025-03-28 21:52:21 -0500 |
commit | 4a52a71956a8d46fcb7294ac71734504bb09bcc2 (patch) | |
tree | ee3dc5af3b6313e921cd920906356f5d4febc4ed /.venv/lib/python3.12/site-packages/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_abstract_expand.xsl | |
parent | cc961e04ba734dd72309fb548a2f97d67d578813 (diff) | |
download | gn-ai-master.tar.gz |
Diffstat (limited to '.venv/lib/python3.12/site-packages/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_abstract_expand.xsl')
-rw-r--r-- | .venv/lib/python3.12/site-packages/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_abstract_expand.xsl | 313 |
1 files changed, 313 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_abstract_expand.xsl b/.venv/lib/python3.12/site-packages/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_abstract_expand.xsl new file mode 100644 index 00000000..50183952 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_abstract_expand.xsl @@ -0,0 +1,313 @@ +<?xml version="1.0" encoding="UTF-8"?><?xar XSLT?> + +<!-- + OVERVIEW - iso_abstract_expand.xsl + + This is a preprocessor for ISO Schematron, which implements abstract patterns. + It also + * extracts a particular schema using an ID, where there are multiple + schemas, such as when they are embedded in the same NVDL script + * allows parameter substitution inside @context, @test, @select, @path + * experimentally, allows parameter recognition and substitution inside + text (NOTE: to be removed, for compataibility with other implementations, + please do not use this) + + This should be used after iso-dsdl-include.xsl and before the skeleton or + meta-stylesheet (e.g. iso-svrl.xsl) . It only requires XSLT 1. + + Each kind of inclusion can be turned off (or on) on the command line. + +--> + +<!-- +Open Source Initiative OSI - The MIT License:Licensing +[OSI Approved License] + +This source code was previously available under the zlib/libpng license. +Attribution is polite. + +The MIT License + +Copyright (c) 2004-2010 Rick Jellife and Academia Sinica Computing Centre, Taiwan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +--> + +<!-- +VERSION INFORMATION + 2013-09-19 RJ + * Allow macro expansion in @path attributes, eg. for sch:name/@path + + 2010-07-10 RJ + * Move to MIT license + + 2008-09-18 RJ + * move out param test from iso:schema template to work with XSLT 1. (Noah Fontes) + + 2008-07-29 RJ + * Create. Pull out as distinct XSL in its own namespace from old iso_pre_pro.xsl + * Put everything in private namespace + * Rewrite replace_substring named template so that copyright is clear + + 2008-07-24 RJ + * correct abstract patterns so for correct names: param/@name and + param/@value + + 2007-01-12 RJ + * Use ISO namespace + * Use pattern/@id not pattern/@name + * Add Oliver Becker's suggests from old Schematron-love-in list for <copy> + * Add XT -ism? + 2003 RJ + * Original written for old namespace + * http://www.topologi.com/resources/iso-pre-pro.xsl +--> +<xslt:stylesheet version="1.0" xmlns:xslt="http://www.w3.org/1999/XSL/Transform" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:iso="http://purl.oclc.org/dsdl/schematron" + xmlns:nvdl="http://purl.oclc.org/dsdl/nvdl" + + xmlns:iae="http://www.schematron.com/namespace/iae" + + > + + <xslt:param name="schema-id"></xslt:param> + + + <!-- Driver for the mode --> + <xsl:template match="/"> + <xsl:apply-templates select="." mode="iae:go" /> + </xsl:template> + + + <!-- ================================================================================== --> + <!-- Normal processing rules --> + <!-- ================================================================================== --> + <!-- Output only the selected schema --> + <xslt:template match="iso:schema" > + <xsl:if test="string-length($schema-id) =0 or @id= $schema-id "> + <xslt:copy> + <xslt:copy-of select="@*" /> + <xslt:apply-templates mode="iae:go" /> + </xslt:copy> + </xsl:if> + </xslt:template> + + + <!-- Strip out any foreign elements above the Schematron schema . + --> + <xslt:template match="*[not(ancestor-or-self::iso:*)]" mode="iae:go" > + <xslt:apply-templates mode="iae:go" /> + </xslt:template> + + + <!-- ================================================================================== --> + <!-- Handle Schematron abstract pattern preprocessing --> + <!-- abstract-to-real calls + do-pattern calls + macro-expand calls + multi-macro-expand + replace-substring --> + <!-- ================================================================================== --> + + <!-- + Abstract patterns allow you to say, for example + + <pattern name="htmlTable" is-a="table"> + <param name="row" value="html:tr"/> + <param name="cell" value="html:td" /> + <param name="table" value="html:table" /> + </pattern> + + For a good introduction, see Uche Ogbujii's article for IBM DeveloperWorks + "Discover the flexibility of Schematron abstract patterns" + http://www-128.ibm.com/developerworks/xml/library/x-stron.html + However, note that ISO Schematron uses @name and @value attributes on + the iso:param element, and @id not @name on the pattern element. + + --> + + <!-- Suppress declarations of abstract patterns --> + <xslt:template match="iso:pattern[@abstract='true']" mode="iae:go" > + <xslt:comment>Suppressed abstract pattern <xslt:value-of select="@id"/> was here</xslt:comment> + </xslt:template> + + + <!-- Suppress uses of abstract patterns --> + <xslt:template match="iso:pattern[@is-a]" mode="iae:go" > + + <xslt:comment>Start pattern based on abstract <xslt:value-of select="@is-a"/></xslt:comment> + + <xslt:call-template name="iae:abstract-to-real" > + <xslt:with-param name="caller" select="@id" /> + <xslt:with-param name="is-a" select="@is-a" /> + </xslt:call-template> + + </xslt:template> + + + + <!-- output everything else unchanged --> + <xslt:template match="*" priority="-1" mode="iae:go" > + <xslt:copy> + <xslt:copy-of select="@*" /> + <xslt:apply-templates mode="iae:go"/> + </xslt:copy> + </xslt:template> + + <!-- Templates for macro expansion of abstract patterns --> + <!-- Sets up the initial conditions for the recursive call --> + <xslt:template name="iae:macro-expand"> + <xslt:param name="caller"/> + <xslt:param name="text" /> + <xslt:call-template name="iae:multi-macro-expand"> + <xslt:with-param name="caller" select="$caller"/> + <xslt:with-param name="text" select="$text"/> + <xslt:with-param name="paramNumber" select="1"/> + </xslt:call-template> + + </xslt:template> + + <!-- Template to replace the current parameter and then + recurse to replace subsequent parameters. --> + + <xslt:template name="iae:multi-macro-expand"> + <xslt:param name="caller"/> + <xslt:param name="text" /> + <xslt:param name="paramNumber" /> + + + <xslt:choose> + <xslt:when test="//iso:pattern[@id=$caller]/iso:param[ $paramNumber]"> + + <xslt:call-template name="iae:multi-macro-expand"> + <xslt:with-param name="caller" select="$caller"/> + <xslt:with-param name="paramNumber" select="$paramNumber + 1"/> + <xslt:with-param name="text" > + <xslt:call-template name="iae:replace-substring"> + <xslt:with-param name="original" select="$text"/> + <xslt:with-param name="substring" + select="concat('$', //iso:pattern[@id=$caller]/iso:param[ $paramNumber ]/@name)"/> + <xslt:with-param name="replacement" + select="//iso:pattern[@id=$caller]/iso:param[ $paramNumber ]/@value"/> + </xslt:call-template> + </xslt:with-param> + </xslt:call-template> + </xslt:when> + <xslt:otherwise><xslt:value-of select="$text" /></xslt:otherwise> + + </xslt:choose> + </xslt:template> + + + <!-- generate the real pattern from an abstract pattern + parameters--> + <xslt:template name="iae:abstract-to-real" > + <xslt:param name="caller"/> + <xslt:param name="is-a" /> + <xslt:for-each select="//iso:pattern[@id= $is-a]"> + <xslt:copy> + + <xslt:choose> + <xslt:when test=" string-length( $caller ) = 0"> + <xslt:attribute name="id"><xslt:value-of select="concat( generate-id(.) , $is-a)" /></xslt:attribute> + </xslt:when> + <xslt:otherwise> + <xslt:attribute name="id"><xslt:value-of select="$caller" /></xslt:attribute> + </xslt:otherwise> + </xslt:choose> + + <xslt:apply-templates select="*|text()" mode="iae:do-pattern" > + <xslt:with-param name="caller"><xslt:value-of select="$caller"/></xslt:with-param> + </xslt:apply-templates> + + </xslt:copy> + </xslt:for-each> + </xslt:template> + + + <!-- Generate a non-abstract pattern --> + <xslt:template mode="iae:do-pattern" match="*"> + <xslt:param name="caller"/> + <xslt:copy> + <xslt:for-each select="@*[name()='test' or name()='context' or name()='select' or name()='path' ]"> + <xslt:attribute name="{name()}"> + <xslt:call-template name="iae:macro-expand"> + <xslt:with-param name="text"><xslt:value-of select="."/></xslt:with-param> + <xslt:with-param name="caller"><xslt:value-of select="$caller"/></xslt:with-param> + </xslt:call-template> + </xslt:attribute> + </xslt:for-each> + <xslt:copy-of select="@*[name()!='test'][name()!='context'][name()!='select'][name()!='path']" /> + <xsl:for-each select="node()"> + <xsl:choose> + <!-- Experiment: replace macros in text as well, to allow parameterized assertions + and so on, without having to have spurious <iso:value-of> calls and multiple + delimiting. + NOTE: THIS FUNCTIONALITY WILL BE REMOVED IN THE FUTURE --> + <xsl:when test="self::text()"> + <xslt:call-template name="iae:macro-expand"> + <xslt:with-param name="text"><xslt:value-of select="."/></xslt:with-param> + <xslt:with-param name="caller"><xslt:value-of select="$caller"/></xslt:with-param> + </xslt:call-template> + </xsl:when> + <xsl:otherwise> + <xslt:apply-templates select="." mode="iae:do-pattern"> + <xslt:with-param name="caller"><xslt:value-of select="$caller"/></xslt:with-param> + </xslt:apply-templates> + </xsl:otherwise> + </xsl:choose> + </xsl:for-each> + </xslt:copy> + </xslt:template> + + <!-- UTILITIES --> + <!-- Simple version of replace-substring function --> + <xslt:template name="iae:replace-substring"> + <xslt:param name="original" /> + <xslt:param name="substring" /> + <xslt:param name="replacement" select="''"/> + + <xsl:choose> + <xsl:when test="not($original)" /> + <xsl:when test="not(string($substring))"> + <xsl:value-of select="$original" /> + </xsl:when> + <xsl:when test="contains($original, $substring)"> + <xsl:variable name="before" select="substring-before($original, $substring)" /> + <xsl:variable name="after" select="substring-after($original, $substring)" /> + + <xsl:value-of select="$before" /> + <xsl:value-of select="$replacement" /> + <!-- recursion --> + <xsl:call-template name="iae:replace-substring"> + <xsl:with-param name="original" select="$after" /> + <xsl:with-param name="substring" select="$substring" /> + <xsl:with-param name="replacement" select="$replacement" /> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <!-- no substitution --> + <xsl:value-of select="$original" /> + </xsl:otherwise> + </xsl:choose> +</xslt:template> + + + +</xslt:stylesheet>
\ No newline at end of file |