<?xml version="1.0"?>
<!--
-SPDX-FileCopyrightText: 2023, 2024 Lady <https://www.ladys.computer/about/#lady>
+SPDX-FileCopyrightText: 2023, 2024, 2025 Lady <https://www.ladys.computer/about/#lady>
SPDX-License-Identifier: MPL-2.0
-->
<!--
⁌ ⛩📰 书社 ∷ lib/catalog2transform.xslt
-© 2023–2024 Lady [@ Ladys Computer].
+© 2023–2025 Lady [@ Ladys Computer].
This Source Code Form is subject to the terms of the Mozilla Public License, v 2.0.
If a copy of the M·P·L was not distributed with this file, You can obtain one at <https://mozilla.org/MPL/2.0/>.
-->
<!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
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#"
<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">
<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()">
</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"/>
</xslt:text>
</xslt:if>
</xslt:attribute>
- </html:meta>
- </html:head>
- <html:body>
- <xslt:copy-of select="$nodes[self::html:html]/html:body/@*|$nodes[self::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]/@*)[not(namespace-uri()='&书社;' and local-name()='archived-as')]"/>
<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:for-each 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:copy>
+ <xslt:copy-of select="@*[not(namespace-uri()='&书社;' and local-name()='archived-as')]|node()"/>
+ </xslt:copy>
+ </xslt:for-each>
<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">