From: Lady <redacted>
Date: Sun, 2 Jun 2024 02:11:10 +0000 (-0400)
Subject: Simplify metadata using new 书社vocab terms
X-Git-Tag: 0.11.0
X-Git-Url: https://git.ladys.computer/Shushe/commitdiff_plain/4d3a236a9807a9a2369eab359c9006e189fc3ebb?hp=c4c2cfb24adfa62c6b4cbd819b7efe80438d8d08

Simplify metadata using new 书社vocab terms

This commit also changes the behaviour of `@书社:destination`:
Formerly, the value of this attribute needed to be a percent·encoded;
now, it must _not_ be percent·encoded.
---

diff --git a/GNUmakefile b/GNUmakefile
index 99e94cf..3c49432 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -478,7 +478,8 @@ ifneq ($(wildcard $(BUILDDIR)/destinations),)
 override destinations := $(shell $(CAT) $(BUILDDIR)/destinations)
 
 # Pair source files and their destinations.
-override sourcedestinationpair := $(foreach destination,$(destinations),$(call sourcefile,$(firstword $(subst |, ,$(destination))))|$(call perdec,$(subst $(space),|,$(wordlist 2,$(words $(subst |, ,$(destination))),$(subst |, ,$(destination))))))
+override sourcedestinationpair := $(foreach destination,$(destinations),$(call sourcefile,$(firstword $(subst |, ,$(destination))))|$(subst $(space),|,$(wordlist 2,$(words $(subst |, ,$(destination))),$(subst |, ,$(destination)))))
+endif
 
 # (callable) Get the destination for the given source files, or return `.NOTDEF/$1´.
 #
@@ -502,7 +503,6 @@ override unbuilt = $(foreach file,$1,$(call uncompiled,$(patsubst $(BUILDDIR)/pu
 
 # (callable) Get the installed locations for the given source files.
 override installed = $(foreach file,$1,$(DESTDIR)/$(call destination,$(file)))
-endif
 
 # ─ ¶ Recipe Variable Definitions ─────────────────────────────────────
 
@@ -631,10 +631,12 @@ $(BUILDDIR)/parser.xslt : $(BUILDDIR)/parser.catalog $(THISDIR)/lib/catalog2pars
 	$(silent)$(TOUCH) $(call quote,$(BUILDDIR)/.update-types)
 
 # Generate R·D·F metadata for files.
-$(call metadata,$(sourcefiles) $(sourceincludes)) : % : $$(call datadata,$$@) $(typeupdates)
+#
+# This “depends” on `$(THISDIR)/lib/expandmetadata.xslt´ not because it is an actual dependency, but because a change to that file strongly suggests a change to these rules has occurred as well.
+$(call metadata,$(sourcefiles) $(sourceincludes)) : % : $$(call datadata,$$@) $(THISDIR)/lib/expandmetadata.xslt $(typeupdates)
 	$(call inform,$(PRINTF) '%s\n' $(call quote,Generating metadata for `$<´…) >&2)
 	$(silent)$(call ensuredirectory,$(dir $@))
-	$(silent){ if $(TEST) ! -f $(call quote,$(BUILDDIR)/.mtime); then $(PRINTF) '%b' '\n' >|$(call quote,$(BUILDDIR)/.mtime); fi; $(TOUCH) -r $(call quote,$<) $(call quote,$(BUILDDIR)/.mtime); $(DIFF) -u $(call quote,$(BUILDDIR)/.mtime) /dev/null | $(SED) '1!d;s/.*	\([^ ]*\) \([^ ]*\).*$$/\1T\2Z/'; $(CKSUM) $(call quote,$<) | $(SED) 's/[ ].*//'; } | $(xargsmultiquote) | $(XARGS) -E '' $(PRINTF) '<?xml version="1.0"?><nfo:LocalFileDataObject 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#" rdf:about="%s" nfo:fileName="%s" nfo:fileUrl="%s"><nie:interpretedAs>$(if $(filter $<,$(assetfiles)),<nfo:InformationElement nie:mimeType="%s"/>,<nfo:PlainTextDocument nie:mimeType="%s"/>)</nie:interpretedAs><nfo:fileLastModified rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">%s</nfo:fileLastModified><nfo:hasHash nfo:hashAlgorithm="CRC32" nfo:hashValue="%s"/></nfo:LocalFileDataObject>' $(call quote,$(call attresc,$(call localuri,$<))) $(call quote,$(call attresc,$(if $(filter $<,$(sourceincludes)),$(call includepath,$<),$(call sourcepath,$<)))) $(call quote,$(call attresc,$(call fileuri,$<))) $(call quote,$(call attresc,$(call typeoffile,$<))) >|$(call quote,$@)
+	$(silent){ if $(TEST) ! -f $(call quote,$(BUILDDIR)/.mtime); then $(PRINTF) '%b' '\n' >|$(call quote,$(BUILDDIR)/.mtime); fi; $(TOUCH) -r $(call quote,$<) $(call quote,$(BUILDDIR)/.mtime); $(DIFF) -u $(call quote,$(BUILDDIR)/.mtime) /dev/null | $(SED) '1!d;s/.*	\([^ ]*\) \([^ ]*\).*$$/\1T\2Z/'; $(CKSUM) $(call quote,$<) | $(SED) 's/[ ].*//'; } | $(xargsmultiquote) | $(XARGS) -E '' $(PRINTF) '<?xml version="1.0"?><书社vocab:$(if $(filter $<,$(sourceincludes)),IncludeFile,SourceFile) 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#" xmlns:书社vocab="urn:fdc:ladys.computer:20231231:Shu1She4:vocab:" rdf:about="%s" 书社vocab:path="%s"><nie:interpretedAs>$(if $(filter $<,$(assetfiles)),<nfo:InformationElement nie:mimeType="%s"/>,<nfo:PlainTextDocument nie:mimeType="%s"/>)</nie:interpretedAs><nfo:fileLastModified rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">%s</nfo:fileLastModified><nfo:hasHash nfo:hashAlgorithm="CRC32" nfo:hashValue="%s"/></书社vocab:$(if $(filter $<,$(sourceincludes)),IncludeFile,SourceFile)>' $(call quote,$(call attresc,$(call localuri,$<))) $(call quote,$(call attresc,$(if $(filter $<,$(sourceincludes)),$(call includepath,$<),$(call sourcepath,$<)))) $(call quote,$(call attresc,$(call typeoffile,$<))) >|$(call quote,$@)
 
 # Parse the files.
 #
@@ -648,7 +650,7 @@ $(call parsed,$(sourcefiles) $(sourceincludes)) : % : $$(call unparsed,$$@) $(BU
 # Collect the metadata into a single file.
 $(BUILDDIR)/metadata : $(call diffprereqs,metadatas,$(call metadata,$(sort $(sourcefiles) $(sourceincludes)))) $(call parsed,$(filter-out $(assetfiles),$(sourcefiles) $(sourceincludes))) $(THISDIR)/lib/expandmetadata.xslt
 	$(call inform,$(PRINTF) '%s\n' 'Compiling metadata…' >&2)
-	$(silent){ $(PRINTF) '<?xml version="1.0"?><rdf:RDF xmlns:dct="http://purl.org/dc/terms/" 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#" xmlns:书社vocab="urn:fdc:ladys.computer:20231231:Shu1She4:vocab:"><nfo:LocalFileDataObject rdf:about="about:shushe?builddir" nfo:fileUrl="%s"><nie:interpretedAs><nfo:Folder/></nie:interpretedAs></nfo:LocalFileDataObject>' $(call quote,$(call attresc,$(call fileuri,$(BUILDDIR)))); { $(foreach meta,$(call metadata,$(sort $(sourcefiles) $(sourceincludes))),$(CAT) $(call quote,$(meta));) } | $(SED) 's/<?xml version="1.0"?>//g'; $(PRINTF) '%s\n' '</rdf:RDF>'; } | $(XSLTPROC) --nonet --novalid --nomkdir --nowrite $(call quote,$(THISDIR)/lib/expandmetadata.xslt) - | $(XMLLINT) --nonet --nsclean - >|$(call quote,$@)
+	$(silent){ $(PRINTF) '<?xml version="1.0"?><rdf:RDF 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#" xmlns:书社vocab="urn:fdc:ladys.computer:20231231:Shu1She4:vocab:"><书社vocab:BuildDirectory nfo:fileUrl="%s"/>' $(call quote,$(call attresc,$(call fileuri,$(BUILDDIR)))); { $(foreach meta,$(call metadata,$(sort $(sourcefiles) $(sourceincludes))),$(CAT) $(call quote,$(meta));) } | $(SED) 's/<?xml version="1.0"?>//g'; $(PRINTF) '%s\n' '</rdf:RDF>'; } | $(XSLTPROC) --nonet --novalid --nomkdir --nowrite $(call quote,$(THISDIR)/lib/expandmetadata.xslt) - | $(XMLLINT) --nonet --nsclean - >|$(call quote,$@)
 
 # Build a list of dependencies for each parsed file.
 $(BUILDDIR)/dependencies : $(BUILDDIR)/metadata $(THISDIR)/lib/metadata2dependencies.xslt
@@ -678,7 +680,7 @@ $(BUILDDIR)/transform.xslt : $(BUILDDIR)/transform.catalog $(BUILDDIR)/metadata
 $(call compiled,$(compilablefiles)) : $(BUILDDIR)/results/% : $$(call parsed,$$(call uncompiled,$$@)) $$(call parsed,$$(call dependencies,$$(call uncompiled,$$@))) $(BUILDDIR)/transform.xslt $(BUILDDIR)/metadata
 	$(call inform,$(PRINTF) '%s\n' $(call quote,Compiling </$*>…) >&2)
 	$(silent)$(call ensuredirectory,$(dir $@))
-	$(silent)$(XSLTPROC) --nonet --novalid --nomkdir --nowrite --stringparam METADATA 'metadata' --stringparam BUILDTIME $$($(DATE) -u '+%Y-%m-%dT%H:%M:%SZ') --stringparam IDENTIFIER $(call quote,$(call localuri,$(call uncompiled,$@))) --stringparam PATH $(call quote,/$*)$(if $(THISREV), --stringparam THISREV $(call quote,$(THISREV)),)$(if $(SRCREV), --stringparam SRCREV $(call quote,$(SRCREV)),) $(call quote,$(BUILDDIR)/transform.xslt) $(call quote,$<) >|$(call quote,$@)
+	$(silent)$(XSLTPROC) --nonet --novalid --nomkdir --nowrite --stringparam METADATA 'metadata' --stringparam BUILDTIME $$($(DATE) -u '+%Y-%m-%dT%H:%M:%SZ') --stringparam IDENTIFIER $(call quote,$(call localuri,$(call uncompiled,$@)))$(if $(THISREV), --stringparam THISREV $(call quote,$(THISREV)),)$(if $(SRCREV), --stringparam SRCREV $(call quote,$(SRCREV)),) $(call quote,$(BUILDDIR)/transform.xslt) $(call quote,$<) >|$(call quote,$@)
 
 # Create the final files from the compiled results (or error in the case of recursive ones).
 $(call built,$(compilablefiles)) : $(BUILDDIR)/public/% : $(BUILDDIR)/results/%
diff --git a/README.markdown b/README.markdown
index 4ce9994..37cc7f7 100644
--- a/README.markdown
+++ b/README.markdown
@@ -618,11 +618,6 @@ The following params are made available globally in parsers and
 - **`THISREV`:**
   The value of the `THISREV` variable (if present).
 
-The following params are only available in transforms :⁠—
-
-- **`PATH`:**
-  The path of the output file (within `DESTDIR`).
-
 ## Output Wrapping
 
 Provided at least one toplevel result element belongs to the H·T·M·L
diff --git a/lib/catalog2transform.xslt b/lib/catalog2transform.xslt
index 5098a2c..e169fa7 100644
--- a/lib/catalog2transform.xslt
+++ b/lib/catalog2transform.xslt
@@ -17,7 +17,6 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
 ]>
 <transform
 	xmlns="http://www.w3.org/1999/XSL/Transform"
-	xmlns:dct="http://purl.org/dc/terms/"
 	xmlns:catalog="urn:oasis:names:tc:entity:xmlns:xml:catalog"
 	xmlns:exsl="http://exslt.org/common"
 	xmlns:exslstr="http://exslt.org/strings"
@@ -29,12 +28,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 +54,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 +71,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">
@@ -359,9 +347,23 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
 			</xslt:template>
 			<xslt:template match="书社:link[@xlink:show='embed']" 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="included" select="$书社:about//*[@rdf:about=$identifier]"/>
 				<xslt:choose>
-					<xslt:when test="$uri">
+					<xslt:when test="$included">
+						<xslt:variable name="uri">
+							<xslt:text>
+								<value-of select="$builddir"/>
+							</xslt:text>
+							<xslt:choose>
+								<xslt:when test="$included/self::书社vocab:SourceFile">
+									<xslt:text>/sources/</xslt:text>
+								</xslt:when>
+								<xslt:when test="$included/self::书社vocab:IncludeFile">
+									<xslt:text>/includes/</xslt:text>
+								</xslt:when>
+							</xslt:choose>
+							<xslt:value-of select="$included/@书社vocab:path"/>
+						</xslt:variable>
 						<xslt:variable name="expanded">
 							<xslt:apply-templates select="document($uri)" mode="书社:expand">
 								<xslt:with-param name="identifier" select="$identifier"/>
diff --git a/lib/expandmetadata.xslt b/lib/expandmetadata.xslt
index e75fe23..e35e2c8 100644
--- a/lib/expandmetadata.xslt
+++ b/lib/expandmetadata.xslt
@@ -13,7 +13,6 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
 -->
 <transform
 	xmlns="http://www.w3.org/1999/XSL/Transform"
-	xmlns:dct="http://purl.org/dc/terms/"
 	xmlns:exsl="http://exslt.org/common"
 	xmlns:nie="http://www.semanticdesktop.org/ontologies/2007/01/19/nie#"
 	xmlns:nfo="http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#"
@@ -24,8 +23,8 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
 	extension-element-prefixes="exsl"
 	version="1.0"
 >
-	<variable name="builddir" select="//*[@rdf:about='about:shushe?builddir']/@nfo:fileUrl"/>
-	<variable name="files" select="/rdf:RDF/nfo:LocalFileDataObject[not(nie:interpretedAs/nfo:Folder)]"/>
+	<variable name="builddir" select="//书社vocab:BuildDirectory/@nfo:fileUrl"/>
+	<variable name="files" select="//书社vocab:SourceFile|//书社vocab:IncludeFile"/>
 	<template name="书社:process-dependencies">
 		<param name="processed"/>
 		<param name="unprocessed"/>
@@ -66,7 +65,7 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
 							</when>
 						</choose>
 					</variable>
-					<for-each select="document(concat($builddir, $subdir, @nfo:fileName), .)//书社:link[@xlink:show='embed']">
+					<for-each select="document(concat($builddir, $subdir, @书社vocab:path), .)//书社:link[@xlink:show='embed']">
 						<if test="exsl:node-set($old)/书社:dependency-root[string()=string(current()/@xlink:href)]">
 							<书社:recursive-dependency>
 								<value-of select="$parent"/>
@@ -97,34 +96,51 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
 			</otherwise>
 		</choose>
 	</template>
-	<template match="rdf:RDF/nfo:LocalFileDataObject[not(nie:interpretedAs/nfo:Folder or nie:interpretedAs/nfo:PlainTextDocument)]" priority="1">
+	<template match="//书社vocab:SourceFile[not(nie:interpretedAs/nfo:PlainTextDocument)]" priority="1">
 		<copy>
-			<apply-templates select="@*|node()"/>
-			<if test="starts-with(@rdf:about, 'about:shushe?source=')">
-				<dct:hasFormat>
-					<nfo:LocalFileDataObject dct:creator="urn:fdc:ladys.computer:20231231:Shu1She4" nfo:fileName="{substring-after(@rdf:about, 'about:shushe?source=')}"/>
-				</dct:hasFormat>
-			</if>
+			<apply-templates select="@*"/>
+			<attribute name="书社vocab:destination">
+				<value-of select="@书社vocab:path"/>
+			</attribute>
+			<apply-templates select="node()"/>
 		</copy>
 	</template>
-	<template match="rdf:RDF/nfo:LocalFileDataObject[nie:interpretedAs/nfo:PlainTextDocument]" priority="1">
-		<variable name="parsed" select="document(concat($builddir, '/sources/', @nfo:fileName), .)"/>
+	<template match="//书社vocab:SourceFile[nie:interpretedAs/nfo:PlainTextDocument]" priority="1">
+		<variable name="parsed" select="document(concat($builddir, '/sources/', @书社vocab:path), .)"/>
 		<variable name="destination-delim" select="concat('/', $parsed/*/@书社:destination, '/')"/>
 		<variable name="destination">
 			<choose>
-				<when test="not(starts-with(@rdf:about, 'about:shushe?source='))"/>
 				<when test="not(contains($destination-delim, '//') or contains($destination-delim, '/./') or contains($destination-delim, '/../'))">
 					<value-of select="$parsed/*/@书社:destination"/>
 				</when>
 				<otherwise>
-					<value-of select="substring-after(@rdf:about, 'about:shushe?source=')"/>
+					<value-of select="@书社vocab:path"/>
 				</otherwise>
 			</choose>
 		</variable>
 		<variable name="dependencies-fragment">
 			<apply-templates select="." mode="书社:dependencies"/>
 		</variable>
-		<variable name="dependencies" select="exsl:node-set($dependencies)"/>
+		<variable name="dependencies" select="exsl:node-set($dependencies-fragment)"/>
+		<copy>
+			<apply-templates select="@*"/>
+			<attribute name="书社vocab:destination">
+				<value-of select="$destination"/>
+			</attribute>
+			<apply-templates select="node()"/>
+			<for-each select="$dependencies/书社:dependency">
+				<书社vocab:hasDependencyOn rdf:resource="{.}"/>
+			</for-each>
+			<for-each select="$dependencies/书社:recursive-dependency">
+				<书社vocab:hasRecursiveDependencyOn rdf:resource="{.}"/>
+			</for-each>
+		</copy>
+	</template>
+	<template match="//书社vocab:IncludeFile[nie:interpretedAs/nfo:PlainTextDocument]" priority="1">
+		<variable name="dependencies-fragment">
+			<apply-templates select="." mode="书社:dependencies"/>
+		</variable>
+		<variable name="dependencies" select="exsl:node-set($dependencies-fragment)"/>
 		<copy>
 			<apply-templates select="@*|node()"/>
 			<for-each select="$dependencies/书社:dependency">
@@ -133,12 +149,6 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
 			<for-each select="$dependencies/书社:recursive-dependency">
 				<书社vocab:hasRecursiveDependencyOn rdf:resource="{.}"/>
 			</for-each>
-			<if test="$destination!=''">
-				<dct:hasFormat>
-					<nfo:LocalFileDataObject dct:creator="urn:fdc:ladys.computer:20231231:Shu1She4" nfo:fileName="{$destination}">
-					</nfo:LocalFileDataObject>
-				</dct:hasFormat>
-			</if>
 		</copy>
 	</template>
 	<template match="@*|node()">
@@ -146,7 +156,7 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
 			<apply-templates select="@*|node()"/>
 		</copy>
 	</template>
-	<template match="nfo:LocalFileDataObject" mode="书社:dependencies">
+	<template match="书社vocab:SourceFile|书社vocab:IncludeFile" mode="书社:dependencies">
 		<if test="nie:interpretedAs/nfo:PlainTextDocument">
 			<call-template name="书社:process-dependencies">
 				<with-param name="unprocessed">
diff --git a/lib/metadata2dependencies.xslt b/lib/metadata2dependencies.xslt
index 7bbd4fa..5f71053 100644
--- a/lib/metadata2dependencies.xslt
+++ b/lib/metadata2dependencies.xslt
@@ -20,7 +20,7 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
 	version="1.0"
 >
 	<template match="/">
-		<for-each select="rdf:RDF/nfo:LocalFileDataObject[nie:interpretedAs/nfo:PlainTextDocument]">
+		<for-each select="rdf:RDF/*[nie:interpretedAs/nfo:PlainTextDocument]">
 			<value-of select="@rdf:about"/>
 			<text>&#xA;</text>
 			<for-each select="书社vocab:hasRecursiveDependencyOn/@rdf:resource">
diff --git a/lib/metadata2destinations.xslt b/lib/metadata2destinations.xslt
index e1fe1cd..e82aa0b 100644
--- a/lib/metadata2destinations.xslt
+++ b/lib/metadata2destinations.xslt
@@ -13,16 +13,15 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
 -->
 <transform
 	xmlns="http://www.w3.org/1999/XSL/Transform"
-	xmlns:dct="http://purl.org/dc/terms/"
-	xmlns:nfo="http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#"
 	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+	xmlns:书社vocab="urn:fdc:ladys.computer:20231231:Shu1She4:vocab:"
 	version="1.0"
 >
 	<template match="/">
-		<for-each select="/rdf:RDF/nfo:LocalFileDataObject[starts-with(@rdf:about, 'about:shushe?source=')]">
+		<for-each select="//书社vocab:SourceFile">
 			<value-of select="@rdf:about"/>
 			<text>|</text>
-			<value-of select="dct:hasFormat/nfo:LocalFileDataObject[@dct:creator='urn:fdc:ladys.computer:20231231:Shu1She4']/@nfo:fileName"/>
+			<value-of select="@书社vocab:destination"/>
 			<text>&#xA;</text>
 		</for-each>
 	</template>