X-Git-Url: https://git.ladys.computer/Shushe/blobdiff_plain/d28cc9410f0b8a9cd18b0f1d1fc717d777058914..bc1b63801488992c309f0b8bd1d5a772b7e5645e:/lib/catalog2transform.xslt diff --git a/lib/catalog2transform.xslt b/lib/catalog2transform.xslt index 1455aa4..ce83bc2 100644 --- a/lib/catalog2transform.xslt +++ b/lib/catalog2transform.xslt @@ -29,12 +29,14 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xslt="http://www.w3.org/1999/XSL/TransformAlias" xmlns:书社="urn:fdc:ladys.computer:20231231:Shu1She4" + xmlns:书社vocab="urn:fdc:ladys.computer:20231231:Shu1She4:vocab:" exclude-result-prefixes="catalog" version="1.0" > <include href="literally.xslt"/> <namespace-alias stylesheet-prefix="xslt" result-prefix="#default"/> <param name="METADATA" select="'about:blank'"/> + <variable name="builddir" select="document($METADATA)//书社vocab:BuildDirectory/@nfo:fileUrl"/> <template match="/"> <variable name="ids"> <for-each select="//catalog:uri[@name]"> @@ -53,7 +55,6 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one <xslt:transform exclude-result-prefixes="nie nfo" extension-element-prefixes="exsl exslstr" version="1.0"> <xslt:param name="BUILDTIME" select="'1972-12-31T00:00:00Z'"/> <xslt:param name="IDENTIFIER" select="false()"/> - <xslt:param name="PATH" select="'/unknown'"/> <xslt:param name="SRCREV" select="false()"/> <xslt:param name="THISREV" select="false()"/> <xslt:variable name="书社:source" select="/"/> @@ -71,19 +72,7 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one <xslt:apply-templates select="$书社:expansion/node()"/> </xslt:variable> <xslt:variable name="书社:result" select="exsl:node-set($书社:result-fragment)"/> - <xslt:variable name="书社:destination"> - <xslt:choose> - <xslt:when test="string($书社:source/@书社:destination)!=''"> - <xslt:value-of select="$书社:source/@书社:destination"/> - </xslt:when> - <xslt:when test="starts-with($PATH, '/')"> - <xslt:value-of select="substring-after($PATH, '/')"/> - </xslt:when> - <xslt:otherwise> - <xslt:value-of select="$PATH"/> - </xslt:otherwise> - </xslt:choose> - </xslt:variable> + <xslt:variable name="书社:destination" select="string($书社:about//*[@rdf:about=$IDENTIFIER]/@书社vocab:destination)"/> <for-each select="//catalog:uri"> <xslt:include href="{@uri}"> <attribute name="书社:id"> @@ -202,14 +191,16 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </xslt:template> <xslt:template name="书社:wrap"> <xslt:param name="nodes" select="/.."/> - <xslt:variable name="modalinput"> + <xslt:variable name="modalinput-fragment"> <xslt:copy-of select="$nodes"/> <apply-templates select="exsl:node-set($unique-ids)" mode="书社:literally"/> </xslt:variable> - <xslt:variable name="metadata"> + <xslt:variable name="modalinput" select="exsl:node-set($modalinput-fragment)"/> + <xslt:variable name="metadata-fragment"> <xslt:copy-of select="$nodes[self::html:html]/html:head/node()|$nodes[self::html:head]/node()"/> - <xslt:apply-templates select="exsl:node-set($modalinput)/node()" mode="书社:metadata"/> + <xslt:apply-templates select="$modalinput/node()" mode="书社:metadata"/> </xslt:variable> + <xslt:variable name="metadata" select="exsl:node-set($metadata-fragment)"/> <html:html> <xslt:copy-of select="$nodes[self::html:html]/@*"/> <xslt:if test="not($nodes[self::html:html]/@书社:archived-as) and $nodes/@书社:archived-as"> @@ -230,7 +221,7 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one <html:head> <xslt:copy-of select="$nodes[self::html:html]/html:head/@*|$nodes[self::html:head]/@*"/> <html:title> - <xslt:for-each select="exsl:node-set($metadata)/html:title"> + <xslt:for-each select="$metadata/html:title"> <xslt:value-of select="."/> <xslt:if test="position()!=last()"> <xslt:text> @@ -239,10 +230,10 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </xslt:if> </xslt:for-each> </html:title> - <xslt:copy-of select="exsl:node-set($metadata)/node()[not(self::html:title)]"/> + <xslt:copy-of select="$metadata/node()[not(self::html:title or self::html:meta and @name='generator')]"/> <html:meta name="generator"> <xslt:attribute name="content"> - <xslt:for-each select="exsl:node-set($metadata)/html:meta[@name='generator']"> + <xslt:for-each select="$metadata/html:meta[@name='generator']"> <xslt:value-of select="@content"/> <xslt:text> <text>, </text> @@ -265,9 +256,9 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </html:head> <html:body> <xslt:copy-of select="$nodes[self::html:html]/html:body/@*|$nodes[self::html:body]/@*"/> - <xslt:apply-templates select="exsl:node-set($modalinput)/node()" mode="书社:header"/> + <xslt:apply-templates select="$modalinput/node()" mode="书社:header"/> <xslt:copy-of select="$nodes[not(self::html:html or self::html:head or self::html:body)]|$nodes[self::html:html]/node()[not(self::html:head or self::html:body)]|$nodes[self::html:html]/html:body/node()|$nodes[self::html:body]/node()"/> - <xslt:apply-templates select="exsl:node-set($modalinput)/node()" mode="书社:footer"/> + <xslt:apply-templates select="$modalinput/node()" mode="书社:footer"/> </html:body> </html:html> </xslt:template> @@ -303,11 +294,6 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one <xslt:apply-templates select="@*|node()"/> </xslt:copy> </xslt:template> - <xslt:template match="@*|node()" mode="书社:apply"> - <xslt:copy> - <xslt:apply-templates select="@*|node()" mode="书社:apply"/> - </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> @@ -355,39 +341,44 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one <xslt:template match="书社:apply-attributes-to-root" mode="书社:apply" priority="1"> <xslt:apply-templates mode="书社:apply"/> </xslt:template> - <xslt:template match="书社:link[@xlink:show='embed']" mode="书社:expand" priority="1"> + <xslt:template match="书社:link[@xlink:show='embed' and (not(@xlink:actuate) or @xlink:actuate='none')]" mode="书社:expand" priority="1"> <xslt:variable name="identifier" select="string(@xlink:href)"/> - <xslt:variable name="uri" select="document($METADATA)//*[@rdf:about=$identifier]/dct:hasFormat/*[nie:interpretedAs/*[@nie:mimeType='application/xml']]/@nfo:fileUrl[1]"/> + <xslt:variable name="is-dir" select="substring($identifier, string-length($identifier))='/'"/> + <xslt:variable name="included" select="$书社:about//*[@rdf:about=$identifier or $is-dir and starts-with(@rdf:about, $identifier)]"/> <xslt:choose> - <xslt:when test="$uri"> - <xslt:variable name="expanded"> - <xslt:apply-templates select="document($uri)" mode="书社:expand"> - <xslt:with-param name="identifier" select="$identifier"/> - </xslt:apply-templates> - </xslt:variable> - <xslt:for-each select="exsl:node-set($expanded)/node()"> - <xslt:copy> - <xslt:choose> - <xslt:when test="self::html:*"> - <xslt:attribute name="itemscope">itemscope</xslt:attribute> - <xslt:attribute name="itemtype"> - <xslt:text> - <text>&书社;:embed</text> - </xslt:text> - <xslt:for-each select="exslstr:tokenize(@itemtype)/token[string()!='&书社;:document']"> + <xslt:when test="$included"> + <xslt:for-each select="$included"> + <xslt:sort select="@rdf:about" data-type="text" lang="zxx" case-order="upper-first"/> + <xslt:variable name="uri" select="书社vocab:hasParsedFile/@nfo:fileUrl"/> + <xslt:variable name="expanded"> + <xslt:apply-templates select="document($uri)" mode="书社:expand"> + <xslt:with-param name="identifier" select="string(@rdf:about)"/> + </xslt:apply-templates> + </xslt:variable> + <xslt:for-each select="exsl:node-set($expanded)/node()"> + <xslt:copy> + <xslt:choose> + <xslt:when test="self::html:*"> + <xslt:attribute name="itemscope">itemscope</xslt:attribute> + <xslt:attribute name="itemtype"> <xslt:text> - <text> </text> + <text>&书社;:embed</text> </xslt:text> - <xslt:value-of select="."/> - </xslt:for-each> - </xslt:attribute> - <xslt:copy-of select="@*[not(namespace-uri()='' and (local-name()='itemscope' or local-name()='itemtype'))]|node()"/> - </xslt:when> - <xslt:otherwise> - <xslt:apply-templates select="@*|node()" mode="书社:expand"/> - </xslt:otherwise> - </xslt:choose> - </xslt:copy> + <xslt:for-each select="exslstr:tokenize(@itemtype)/token[string()!='&书社;:document']"> + <xslt:text> + <text> </text> + </xslt:text> + <xslt:value-of select="."/> + </xslt:for-each> + </xslt:attribute> + <xslt:copy-of select="@*[not(namespace-uri()='' and (local-name()='itemscope' or local-name()='itemtype'))]|node()"/> + </xslt:when> + <xslt:otherwise> + <xslt:apply-templates select="@*|node()" mode="书社:expand"/> + </xslt:otherwise> + </xslt:choose> + </xslt:copy> + </xslt:for-each> </xslt:for-each> </xslt:when> <xslt:otherwise> @@ -397,6 +388,11 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </xslt:otherwise> </xslt:choose> </xslt:template> + <xslt:template match="@*|node()" mode="书社:apply" priority="-1"> + <xslt:copy> + <xslt:apply-templates select="@*|node()" mode="书社:apply"/> + </xslt:copy> + </xslt:template> <xslt:template match="/node()" mode="书社:expand" priority="0"> <xslt:param name="identifier" select="$IDENTIFIER"/> <xslt:copy> @@ -433,7 +429,7 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </xslt:choose> </xslt:copy> </xslt:template> - <xslt:template match="@*|node()[not(self::书社:link) or not(@xlink:show='embed')]" mode="书社:expand" priority="-1"> + <xslt:template match="@*|node()" mode="书社:expand" priority="-1"> <xslt:copy> <xslt:apply-templates select="@*|node()" mode="书社:expand"/> </xslt:copy>