X-Git-Url: https://git.ladys.computer/Shushe/blobdiff_plain/070f5743ea9121df02cf1717c806531703dd7899..c1a08dff0fcba3fc28ec3061a359d71efeb438be:/lib/catalog2transform.xslt diff --git a/lib/catalog2transform.xslt b/lib/catalog2transform.xslt index 2c555e3..6d20460 100644 --- a/lib/catalog2transform.xslt +++ b/lib/catalog2transform.xslt @@ -19,6 +19,7 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one xmlns="http://www.w3.org/1999/XSL/Transform" xmlns:catalog="urn:oasis:names:tc:entity:xmlns:xml:catalog" xmlns:exsl="http://exslt.org/common" + xmlns:exslfunc="http://exslt.org/functions" xmlns:exslstr="http://exslt.org/strings" xmlns:html="http://www.w3.org/1999/xhtml" xmlns:nie="http://www.semanticdesktop.org/ontologies/2007/01/19/nie#" @@ -51,26 +52,52 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </if> </for-each> </variable> - <xslt:transform exclude-result-prefixes="nie nfo" extension-element-prefixes="exsl exslstr" version="1.0"> + <xslt:transform exclude-result-prefixes="nie nfo" extension-element-prefixes="exsl exslfunc exslstr" version="1.0"> <xslt:param name="BUILDTIME" select="'1972-12-31T00:00:00Z'"/> <xslt:param name="IDENTIFIER" select="false()"/> <xslt:param name="SRCREV" select="false()"/> <xslt:param name="THISREV" select="false()"/> + <element name="exslfunc:function"> + <attribute name="name"> + <text>书社:document-with-attributes-applied</text> + </attribute> + <xslt:param name="document" select="/.."/> + <xslt:variable name="application-result-fragment"> + <xslt:variable name="result-nodes" select="$document/node()[not(self::书社:apply-attributes-to-root)]|$document/书社:apply-attributes-to-root//node()[not(self::书社:apply-attributes-to-root) and not(ancestor::*[not(self::书社:apply-attributes-to-root)])]"/> + <xslt:variable name="root-with-attributes"> + <xslt:call-template name="书社:apply-attributes"> + <xslt:with-param name="context-nodes" select="$document//书社:apply-attributes-to-root"/> + <xslt:with-param name="destination-nodes" select="$result-nodes"/> + </xslt:call-template> + </xslt:variable> + <xslt:apply-templates select="exsl:node-set($root-with-attributes)" mode="书社:apply"/> + </xslt:variable> + <element name="exslfunc:result"> + <attribute name="select"> + <text>exsl:node-set($application-result-fragment)</text> + </attribute> + </element> + </element> <xslt:variable name="书社:source" select="/"/> <xslt:variable name="书社:about-fragment"> <apply-templates select="document($METADATA)" mode="书社:literally"> - <with-param name="extension-element-namespaces" select="'http://exslt.org/common http://exslt.org/strings'"/> + <with-param name="extension-element-namespaces" select="'http://exslt.org/common http://exslt.org/functions http://exslt.org/strings'"/> </apply-templates> </xslt:variable> <xslt:variable name="书社:about" select="exsl:node-set($书社:about-fragment)"/> <xslt:variable name="书社:expansion-fragment"> <xslt:apply-templates select="$书社:source/node()" mode="书社:expand"/> </xslt:variable> - <xslt:variable name="书社:expansion" select="exsl:node-set($书社:expansion-fragment)"/> + <xslt:variable name="书社:expansion" select="书社:document-with-attributes-applied(exsl:node-set($书社:expansion-fragment))"/> <xslt:variable name="书社:result-fragment"> - <xslt:apply-templates select="$书社:expansion/node()"/> + <xslt:element name="书社:apply-attributes-to-root"> + <xslt:attribute name="书社:version"> + <xslt:value-of select="$THISREV"/> + </xslt:attribute> + <xslt:apply-templates select="$书社:expansion/node()"/> + </xslt:element> </xslt:variable> - <xslt:variable name="书社:result" select="exsl:node-set($书社:result-fragment)"/> + <xslt:variable name="书社:result" select="书社:document-with-attributes-applied(exsl:node-set($书社:result-fragment))"/> <xslt:variable name="书社:destination" select="string($书社:about//*[@rdf:about=$IDENTIFIER]/@书社vocab:destination)"/> <for-each select="//catalog:uri"> <xslt:include href="{@uri}"> @@ -80,7 +107,6 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </xslt:include> </for-each> <xslt:template name="书社:apply-attributes"> - <xslt:param name="and-version" select="false()"/> <xslt:param name="context-nodes" select="/.."/> <xslt:param name="destination-nodes" select="/.."/> <xslt:variable name="additional-attributes" select="$context-nodes/@*"/> @@ -124,11 +150,6 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </xslt:choose> </xslt:variable> <xslt:copy> - <xslt:if test="$and-version and $THISREV"> - <xslt:attribute name="书社:version"> - <xslt:value-of select="$THISREV"/> - </xslt:attribute> - </xslt:if> <xslt:if test="string($lang)!=''"> <xslt:if test="self::html:* or self::svg:*"> <xslt:attribute name="lang"> @@ -143,8 +164,7 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one <xslt:choose> <xslt:when test="@namespace-uri='&xml;'"/> <xslt:when test="$context[self::html:* or self::svg:*] and @namespace-uri='' and @local-name='lang'"/> - <xslt:when test="@namespace-uri='&书社;' and @local-name='archived-as' and $context-nodes/ancestor::*[not(self::书社:apply-attributes-to-root or self::书社:apply-attributes)][position()=1 and not(self::书社:archive)]"/> - <xslt:when test="@namespace-uri='&书社;' and (@local-name='destination' or @local-name='disable-output-wrapping' or @local-name='version')"/> + <xslt:when test="@namespace-uri='&书社;' and (@local-name='destination' or @local-name='disable-output-wrapping')"/> <xslt:when test="preceding-sibling::*[@local-name=current()/@local-name and @namespace-uri=current()/@namespace-uri]"/> <xslt:otherwise> <xslt:attribute> @@ -261,112 +281,17 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </html:body> </html:html> </xslt:template> - <xslt:template match="/" priority="1"> - <xslt:variable name="result-nodes" select="$书社:result/node()[not(self::书社:apply-attributes-to-root)]|$书社:result/书社:apply-attributes-to-root//node()[not(self::书社:apply-attributes-to-root) and not(ancestor::*[not(self::书社:apply-attributes-to-root)])]"/> - <xslt:variable name="significant-nodes" select="$result-nodes/descendant-or-self::*[not(self::书社:apply-attributes) and not(ancestor::*[not(self::书社:apply-attributes)])]"/> - <xslt:variable name="root-with-attributes"> - <xslt:choose> - <xslt:when test="not($significant-nodes/self::html:*) or $significant-nodes/self::书社:*[local-name()='raw-text' or local-name()='base64-binary' or local-name()='archive'] or $significant-nodes/@书社:disable-output-wrapping or $书社:result//书社:apply-attributes-to-root/@书社:disable-output-wrapping"> - <xslt:call-template name="书社:apply-attributes"> - <xslt:with-param name="and-version" select="true()"/> - <xslt:with-param name="context-nodes" select="$书社:result//书社:apply-attributes-to-root"/> - <xslt:with-param name="destination-nodes" select="$result-nodes"/> - </xslt:call-template> - </xslt:when> - <xslt:otherwise> - <xslt:variable name="wrapped-result"> - <xslt:call-template name="书社:wrap"> - <xslt:with-param name="nodes" select="$result-nodes"/> - </xslt:call-template> - </xslt:variable> - <xslt:call-template name="书社:apply-attributes"> - <xslt:with-param name="and-version" select="true()"/> - <xslt:with-param name="context-nodes" select="$书社:result//书社:apply-attributes-to-root"/> - <xslt:with-param name="destination-nodes" select="exsl:node-set($wrapped-result)/node()"/> - </xslt:call-template> - </xslt:otherwise> - </xslt:choose> + <xslt:template match="/"> + <xslt:variable name="finalization-fragment"> + <xslt:apply-templates select="$书社:result" mode="书社:finalize"/> </xslt:variable> - <xslt:apply-templates select="exsl:node-set($root-with-attributes)/node()" mode="书社:apply"/> + <xslt:copy-of select="书社:document-with-attributes-applied(exsl:node-set($finalization-fragment))"/> </xslt:template> <xslt:template match="@*|node()" priority="-1"> <xslt:copy> <xslt:apply-templates select="@*|node()"/> </xslt:copy> </xslt:template> - <xslt:template match="@书社:destination|@书社:disable-output-wrapping|@书社:archived-as[../ancestor::*[not(self::书社:apply-attributes-to-root or self::书社:apply-attributes)]]" mode="书社:apply" priority="1"/> - <xslt:template match="书社:archive" mode="书社:apply" priority="1"> - <xslt:copy> - <xslt:for-each select="@*"> - <xslt:choose> - <xslt:when test="local-name()='archived-as' and namespace-uri()='&书社;' and ../ancestor::*[not(self::书社:apply-attributes-to-root or self::书社:apply-attributes)]"/> - <xslt:otherwise> - <xslt:apply-templates select="." mode="书社:apply"/> - </xslt:otherwise> - </xslt:choose> - </xslt:for-each> - <xslt:for-each select="node()"> - <xslt:choose> - <xslt:when test="self::*"> - <xslt:variable name="component-fragment"> - <xslt:copy> - <xslt:choose> - <xslt:when test="self::html:*"> - <xslt:variable name="existing-types" select="exslstr:tokenize(@itemtype)"/> - <xslt:attribute name="itemscope">itemscope</xslt:attribute> - <xslt:attribute name="itemtype"> - <xslt:for-each select="$existing-types/token"> - <xslt:if test="position()!=1"> - <xslt:text> - <text> </text> - </xslt:text> - </xslt:if> - <xslt:value-of select="."/> - </xslt:for-each> - <xslt:if test="not($existing-types/token[string()='&书社;:embed' or string()='&书社;:document'])"> - <xslt:if test="$existing-types/token"> - <xslt:text> - <text> </text> - </xslt:text> - </xslt:if> - <xslt:text> - <text>&书社;:document</text> - </xslt:text> - </xslt:if> - </xslt:attribute> - <xslt:copy-of select="@*[not(namespace-uri()='' and (local-name()='itemscope' or local-name()='itemtype'))]|node()"/> - </xslt:when> - <xslt:otherwise> - <xslt:copy-of select="@*|node()"/> - </xslt:otherwise> - </xslt:choose> - </xslt:copy> - </xslt:variable> - <xslt:variable name="wrapped-component-fragment"> - <xslt:for-each select="exsl:node-set($component-fragment)/*"> - <xslt:variable name="result-nodes" select="self::*[not(self::书社:apply-attributes-to-root)]|self::书社:apply-attributes-to-root//node()[not(self::书社:apply-attributes-to-root) and not(ancestor::*[not(self::书社:apply-attributes-to-root)])]"/> - <xslt:variable name="significant-nodes" select="$result-nodes/descendant-or-self::*[not(self::书社:apply-attributes) and not(ancestor::*[not(self::书社:apply-attributes)])]"/> - <xslt:choose> - <xslt:when test="not($significant-nodes/self::html:*) or $significant-nodes/self::书社:*[local-name()='raw-text' or local-name()='base64-binary' or local-name()='archive'] or $significant-nodes/@书社:disable-output-wrapping"> - <xslt:copy-of select="."/> - </xslt:when> - <xslt:otherwise> - <xslt:call-template name="书社:wrap"> - <xslt:with-param name="nodes" select="$result-nodes"/> - </xslt:call-template> - </xslt:otherwise> - </xslt:choose> - </xslt:for-each> - </xslt:variable> - <xslt:apply-templates select="exsl:node-set($wrapped-component-fragment)/node()" mode="书社:apply"/> - </xslt:when> - <xslt:otherwise> - <xslt:apply-templates select="." mode="书社:apply"/> - </xslt:otherwise> - </xslt:choose> - </xslt:for-each> - </xslt:copy> - </xslt:template> <xslt:template match="书社:apply-attributes" mode="书社:apply" priority="1"> <xslt:variable name="children"> <xslt:apply-templates mode="书社:apply"/> @@ -510,6 +435,79 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </xslt:copy> </xslt:template> <xslt:template match="text()" mode="书社:header"/> + <xslt:template match="书社:archive" mode="书社:finalize" priority="1"> + <xslt:copy> + <xslt:apply-templates select="@*" mode="书社:finalize"/> + <xslt:for-each select="node()"> + <xslt:choose> + <xslt:when test="self::*"> + <xslt:variable name="component-fragment"> + <xslt:copy> + <xslt:choose> + <xslt:when test="self::html:*"> + <xslt:variable name="existing-types" select="exslstr:tokenize(@itemtype)"/> + <xslt:attribute name="itemscope">itemscope</xslt:attribute> + <xslt:attribute name="itemtype"> + <xslt:for-each select="$existing-types/token"> + <xslt:if test="position()!=1"> + <xslt:text> + <text> </text> + </xslt:text> + </xslt:if> + <xslt:value-of select="."/> + </xslt:for-each> + <xslt:if test="not($existing-types/token[string()='&书社;:embed' or string()='&书社;:document'])"> + <xslt:if test="$existing-types/token"> + <xslt:text> + <text> </text> + </xslt:text> + </xslt:if> + <xslt:text> + <text>&书社;:document</text> + </xslt:text> + </xslt:if> + </xslt:attribute> + <xslt:copy-of select="@*[not(namespace-uri()='' and (local-name()='itemscope' or local-name()='itemtype'))]|node()"/> + </xslt:when> + <xslt:otherwise> + <xslt:copy-of select="@*|node()"/> + </xslt:otherwise> + </xslt:choose> + </xslt:copy> + </xslt:variable> + <xslt:variable name="finalization-fragment"> + <xslt:apply-templates select="exsl:node-set($component-fragment)" mode="书社:finalize"/> + </xslt:variable> + <xslt:copy-of select="书社:document-with-attributes-applied(exsl:node-set($finalization-fragment))"/> + </xslt:when> + <xslt:otherwise> + <xslt:apply-templates select="." mode="书社:finalize"/> + </xslt:otherwise> + </xslt:choose> + </xslt:for-each> + </xslt:copy> + </xslt:template> + <xslt:template match="@书社:destination|@书社:disable-output-wrapping" mode="书社:finalize" priority="1"/> + <xslt:template match="/" mode="书社:finalize"> + <xslt:choose> + <xslt:when test="not(html:*) or 书社:raw-text or 书社:base64-binary or 书社:archive or */@书社:disable-output-wrapping"> + <xslt:apply-templates mode="书社:finalize"/> + </xslt:when> + <xslt:otherwise> + <xslt:variable name="wrapped-result"> + <xslt:call-template name="书社:wrap"> + <xslt:with-param name="nodes" select="node()"/> + </xslt:call-template> + </xslt:variable> + <xslt:apply-templates select="exsl:node-set($wrapped-result)/node()" mode="书社:finalize"/> + </xslt:otherwise> + </xslt:choose> + </xslt:template> + <xslt:template match="@*|node()" mode="书社:finalize" priority="-1"> + <xslt:copy> + <xslt:apply-templates select="@*|node()" mode="书社:finalize"/> + </xslt:copy> + </xslt:template> <xslt:template match="text()" mode="书社:footer"/> <xslt:template match="text()" mode="书社:metadata"/> <xslt:output method="xml" encoding="UTF-8" cdata-section-elements="html:script html:style html:textarea 书社:raw-output 书社:raw-text"/>