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>