From: Lady <redacted> Date: Sun, 15 Dec 2024 01:01:43 +0000 (-0500) Subject: Don’t use literal result elements in transforms X-Git-Tag: 0.13.3^0 X-Git-Url: https://git.ladys.computer/Shushe/commitdiff_plain/5c2f4a2d2c9913196c6092f0f72a8c4ff6e76752 Don’t use literal result elements in transforms See also the prior work to do this with parsers. --- diff --git a/lib/catalog2transform.xslt b/lib/catalog2transform.xslt index 6d20460..b93aa37 100644 --- a/lib/catalog2transform.xslt +++ b/lib/catalog2transform.xslt @@ -13,6 +13,7 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one --> <!DOCTYPE transform [ <!ENTITY 书社 "urn:fdc:ladys.computer:20231231:Shu1She4"> + <!ENTITY xhtml "http://www.w3.org/1999/xhtml"> <!ENTITY xml "http://www.w3.org/XML/1998/namespace"> ]> <transform @@ -21,7 +22,7 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one 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:html="&xhtml;" xmlns:nie="http://www.semanticdesktop.org/ontologies/2007/01/19/nie#" xmlns:nfo="http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" @@ -220,7 +221,7 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one <xslt:apply-templates select="$modalinput/node()" mode="书社:metadata"/> </xslt:variable> <xslt:variable name="metadata" select="exsl:node-set($metadata-fragment)"/> - <html:html> + <xslt:element name="html" namespace="&xhtml;"> <xslt:copy-of select="$nodes[self::html:html]/@*"/> <xslt:if test="not($nodes[self::html:html]/@书社:archived-as) and $nodes/@书社:archived-as"> <xslt:attribute name="书社:archived-as"> @@ -237,9 +238,9 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one <xslt:value-of select="$nodes[self::html:*]/@lang|$nodes[self::svg:*]/@lang|$nodes/@xml:lang"/> </xslt:attribute> </xslt:if> - <html:head> + <xslt:element name="head" namespace="&xhtml;"> <xslt:copy-of select="$nodes[self::html:html]/html:head/@*|$nodes[self::html:head]/@*"/> - <html:title> + <xslt:element name="title" namespace="&xhtml;"> <xslt:for-each select="$metadata/html:title"> <xslt:value-of select="."/> <xslt:if test="position()!=last()"> @@ -248,9 +249,14 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </xslt:text> </xslt:if> </xslt:for-each> - </html:title> + </xslt:element> <xslt:copy-of select="$metadata/node()[not(self::html:title or self::html:meta and @name='generator')]"/> - <html:meta name="generator"> + <xslt:element name="meta" namespace="&xhtml;"> + <xslt:attribute name="name"> + <xslt:text> + <text>generator</text> + </xslt:text> + </xslt:attribute> <xslt:attribute name="content"> <xslt:for-each select="$metadata/html:meta[@name='generator']"> <xslt:value-of select="@content"/> @@ -271,15 +277,15 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </xslt:text> </xslt:if> </xslt:attribute> - </html:meta> - </html:head> - <html:body> + </xslt:element> + </xslt:element> + <xslt:element name="body" namespace="&xhtml;"> <xslt:copy-of select="$nodes[self::html:html]/html:body/@*|$nodes[self::html:body]/@*"/> <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="$modalinput/node()" mode="书社:footer"/> - </html:body> - </html:html> + </xslt:element> + </xslt:element> </xslt:template> <xslt:template match="/"> <xslt:variable name="finalization-fragment"> diff --git a/transforms/asset.xslt b/transforms/asset.xslt index 2b43595..89f1475 100644 --- a/transforms/asset.xslt +++ b/transforms/asset.xslt @@ -13,11 +13,12 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one --> <!DOCTYPE transform [ <!ENTITY wrapped "ancestor::html:html[not(parent::* or @书社:disable-output-wrapping)]"> + <!ENTITY xhtml "http://www.w3.org/1999/xhtml"> ]> <transform xmlns="http://www.w3.org/1999/XSL/Transform" xmlns:exsl="http://exslt.org/common" - xmlns:html="http://www.w3.org/1999/xhtml" + xmlns:html="&xhtml;" xmlns:书社="urn:fdc:ladys.computer:20231231:Shu1She4" extension-element-prefixes="exsl" version="1.0" @@ -25,30 +26,56 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one <书社:id>urn:fdc:ladys.computer:20231231:Shu1She4:asset.xslt</书社:id> <template match="html:style[&wrapped; and not(ancestor::html:head)]|html:object[@type='text/css' and &wrapped;]" mode="书社:finalize" priority="0"/> <template match="html:object[@type='text/javascript']" mode="书社:finalize" priority="0"> - <html:script type="{@type}" src="{@data}"> + <element name="script" namespace="&xhtml;"> + <attribute name="type"> + <value-of select="@type"/> + </attribute> + <attribute name="src"> + <value-of select="@data"/> + </attribute> <copy-of select="@书社:identifier"/> - </html:script> + </element> </template> <template match="html:object[starts-with(@type, 'audio/')]" mode="书社:finalize" priority="0"> - <html:audio controls="" src="{@data}"> + <element name="audio" namespace="&xhtml;"> + <attribute name="controls"/> + <attribute name="src"> + <value-of select="@data"/> + </attribute> <copy-of select="@书社:identifier"/> - </html:audio> + </element> </template> <template match="html:object[starts-with(@type, 'image/') and not(@type='image/svg+xml')]" mode="书社:finalize" priority="0"> - <html:img src="{@data}"> + <element name="img" namespace="&xhtml;"> + <attribute name="src"> + <value-of select="@data"/> + </attribute> <copy-of select="@书社:identifier|@width|@height"/> - </html:img> + </element> </template> <template match="html:object[starts-with(@type, 'video/')]" mode="书社:finalize" priority="0"> - <html:video controls="" src="{@data}"> + <element name="video" namespace="&xhtml;"> + <attribute name="controls"/> + <attribute name="src"> + <value-of select="@data"/> + </attribute> <copy-of select="@书社:identifier|@width|@height"/> - </html:video> + </element> </template> <template match="书社:id[string(.)='urn:fdc:ladys.computer:20231231:Shu1She4:asset.xslt']" mode="书社:metadata"> <for-each select="$书社:expansion//html:object[@type='text/css']"> - <html:link rel="stylesheet" type="text/css" href="{@data}"> + <element name="link" namespace="&xhtml;"> + <attribute name="rel"> + <text>stylesheet</text> + </attribute> + <attribute name="type"> + <text>text/css</text> + </attribute> + <attribute name="href"> + <value-of select="@data"/> + </attribute> <copy-of select="@书社:identifier"/> - </html:link> + </element> </for-each> <for-each select="$书社:expansion//html:style[not(ancestor::html:head)]"> <copy-of select="."/> diff --git a/transforms/metadata.xslt b/transforms/metadata.xslt index 71a10c5..c481750 100644 --- a/transforms/metadata.xslt +++ b/transforms/metadata.xslt @@ -13,18 +13,19 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one --> <!DOCTYPE transform [ <!ENTITY attoplevel "not(ancestor::html:template) and ancestor::html:*[@itemscope and @itemtype='&书社;:document'] and not(ancestor::html:*[@itemscope]/ancestor::html:*[@itemscope and @itemtype='&书社;:document'] or preceding::html:*[@itemtype='&书社;:document'])"> + <!ENTITY xhtml "http://www.w3.org/1999/xhtml"> <!ENTITY 书社 "urn:fdc:ladys.computer:20231231:Shu1She4"> ]> <transform xmlns="http://www.w3.org/1999/XSL/Transform" - xmlns:html="http://www.w3.org/1999/xhtml" - xmlns:书社="urn:fdc:ladys.computer:20231231:Shu1She4" + xmlns:html="&xhtml;" + xmlns:书社="&书社;" version="1.0" > <书社:id>urn:fdc:ladys.computer:20231231:Shu1She4:metadata.xslt</书社:id> <template match="html:meta[not(@name) and @itemprop='&书社;:title'][&attoplevel;]" mode="书社:metadata"> - <html:title> + <element name="title" namespace="&xhtml;"> <value-of select="@content"/> - </html:title> + </element> </template> </transform>