# (callable) Get the source files for the given parsed file.
override unparsed = $(foreach file,$1,$(patsubst %|$(file),%,$(filter %|$(file),$(sourceparsedpair))))
-# Pair each parser, transform, source file, parsed file, or metadata compilation with its file u·r·i.
-override fileuripairs := $(join $(patsubst %,%|,$(PARSERS) $(TRANSFORMS) $(sourcefiles) $(sourceincludes) $(call parsed,$(sourcefiles) $(sourceincludes)) $(BUILDDIR)/metadata),$(call pathenc,$(foreach uriable,$(PARSERS) $(TRANSFORMS) $(sourcefiles) $(sourceincludes) $(call parsed,$(sourcefiles) $(sourceincludes)) $(BUILDDIR)/metadata,file://$(abspath $(uriable)))))
+# Pair each build directory, parser, transform, or source file with its file u·r·i.
+override fileuripairs := $(join $(patsubst %,%|,$(BUILDDIR) $(PARSERS) $(TRANSFORMS) $(sourcefiles) $(sourceincludes)),$(call pathenc,$(foreach uriable,$(BUILDDIR) $(PARSERS) $(TRANSFORMS) $(sourcefiles) $(sourceincludes),file://$(abspath $(uriable)))))
# (callable) Get the file u·r·is for the given parsers, transforms, parsed files, or metadata compilations.
override fileuri = $(foreach file,$1,$(or $(patsubst $(file)|%,%,$(filter $(file)|%,$(fileuripairs))),$(error Unable to get file u·r·i for `$(file)´)))
# 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))))))
-# (callable) Get the destination for the given source files, or return `NOTDEF´.
+# (callable) Get the destination for the given source files, or return `.NOTDEF/$1´.
#
-# The fallback here is because destinations are used to generate targets and thus must always be non·empty, even when they haven’t been generated yet.
-override destination = $(foreach file,$1,$(or $(patsubst $(file)|%,%,$(filter $(file)|%,$(sourcedestinationpair))),NOTDEF))
+# The fallback here is because destinations are used to generate targets and thus must always be non·empty and should be unique, even when they haven’t been generated yet.
+override destination = $(foreach file,$1,$(or $(patsubst $(file)|%,%,$(filter $(file)|%,$(sourcedestinationpair))),.NOTDEF/$1))
# Pair each source file with its compiled location.
override sourcecompiledpair := $(foreach file,$(sourcefiles),$(file)|$(BUILDDIR)/results/$(call destination,$(file)))
$(call metadata,$(sourcefiles) $(sourceincludes)) : % : $$(call datadata,$$@) $(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: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#" 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><dct:hasFormat><nfo:LocalFileDataObject nfo:fileUrl="%s"><nie:interpretedAs><nfo:PlainTextDocument nie:mimeType="application/xml"/></nie:interpretedAs></nfo:LocalFileDataObject></dct:hasFormat><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,$(notdir $<))) $(call quote,$(call attresc,$(call fileuri,$<))) $(call quote,$(call attresc,$(call typeoffile,$<))) $(call quote,$(call attresc,$(call fileuri,$(call parsed,$<)))) >|$(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"?><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,$@)
# Parse the files.
#
$(silent)$(if $(filter $<,$(assetfiles)),$(PRINTF) '%s\n' $(call quote,<?xml version="1.0"?><object xmlns="http://www.w3.org/1999/xhtml" type="$(call typeoffile,$<)" data="$(call datauri,$<)"/>) >|$(call quote,$@),$(if $(filter $<,$(plaintextfiles)),$(call wrapplaintext,$<),$(call serializexml,$<)) | $(XSLTPROC) --nonet --novalid --nomkdir --nowrite --stringparam BUILDTIME $$($(DATE) -u '+%Y-%m-%dT%H:%M:%SZ') --stringparam IDENTIFIER $(call quote,$(call localuri,$<))$(if $(THISREV), --stringparam THISREV $(call quote,$(THISREV)),)$(if $(SRCREV), --stringparam SRCREV $(call quote,$(SRCREV)),) $(call quote,$(BUILDDIR)/parser.xslt) - >|$(call quote,$@))
# Collect the metadata into a single file.
-$(BUILDDIR)/metadata : $(call diffprereqs,metadatas,$(call metadata,$(sort $(sourcefiles) $(sourceincludes))))
+$(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) '%s' '<?xml version="1.0"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">'; $(foreach meta,$(call metadata,$(sort $(sourcefiles) $(sourceincludes))),$(CAT) $(call quote,$(meta)) | $(SED) 's/<?xml version="1.0"?>//';) $(PRINTF) '%s\n' '</rdf:RDF>'; } >|$(call quote,$@)
+ $(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,$@)
# Build a list of dependencies for each parsed file.
-$(BUILDDIR)/dependencies : $(BUILDDIR)/metadata $(call parsed,$(filter-out $(assetfiles),$(sourcefiles) $(sourceincludes))) $(THISDIR)/lib/metadata2dependencies.xslt
+$(BUILDDIR)/dependencies : $(BUILDDIR)/metadata $(THISDIR)/lib/metadata2dependencies.xslt
$(call inform,$(PRINTF) '%s\n' 'Identifying dependencies…' >&2)
$(silent)$(TOUCH) $(call quote,$@)
$(silent)$(XSLTPROC) --nonet --novalid --nomkdir --nowrite $(call quote,$(THISDIR)/lib/metadata2dependencies.xslt) $(call quote,$<) >|$(call quote,$@)
#
# This depends on parsing non·asset source files, but not assets or includes.
# It does not require knowing the dependencies.
-$(BUILDDIR)/destinations : $(BUILDDIR)/metadata $(call parsed,$(filter-out $(assetfiles),$(sourcefiles))) $(THISDIR)/lib/metadata2destinations.xslt
+$(BUILDDIR)/destinations : $(BUILDDIR)/metadata $(THISDIR)/lib/metadata2destinations.xslt
$(call inform,$(PRINTF) '%s\n' 'Identifying output destinations…' >&2)
$(silent)$(TOUCH) $(call quote,$@)
$(silent)$(XSLTPROC) --nonet --novalid --nomkdir --nowrite $(call quote,$(THISDIR)/lib/metadata2destinations.xslt) $(call quote,$<) >|$(call quote,$@)
$(foreach transform,$(TRANSFORMS),$(silent){ $(call id,$(transform)); $(PRINTF) '%s\n' $(call quote,$(call fileuri,$(transform))) '--noout' $(call quote,$@); } | $(xargsmultiquote) | $(XARGS) -E '' $(XMLCATALOG) --add uri$(newline))
$(BUILDDIR)/transform.xslt : $(BUILDDIR)/transform.catalog $(BUILDDIR)/metadata $(THISDIR)/lib/catalog2transform.xslt
$(call inform,$(PRINTF) '%s\n' 'Generating main transform…' >&2)
- $(silent)$(XSLTPROC) --nonet --novalid --nomkdir --nowrite --stringparam METADATA $(call quote,$(call fileuri,$(BUILDDIR)/metadata)) $(call quote,$(THISDIR)/lib/catalog2transform.xslt) $(call quote,$<) >|$(call quote,$@)
+ $(silent)$(XSLTPROC) --nonet --novalid --nomkdir --nowrite --stringparam METADATA $(call quote,$(call fileuri,$(BUILDDIR))/metadata) $(call quote,$(THISDIR)/lib/catalog2transform.xslt) $(call quote,$<) >|$(call quote,$@)
# Compile the result files using the dependencies as necessary.
$(call compiled,$(compilablefiles)) : $(BUILDDIR)/results/% : $$(call parsed,$$(call uncompiled,$$@)) $$(call parsed,$$(call dependencies,$$(call uncompiled,$$@))) $(BUILDDIR)/transform.xslt $(BUILDDIR)/metadata
--- /dev/null
+<?xml version="1.0"?>
+<!--
+SPDX-FileCopyrightText: 2023, 2024 Lady <https://www.ladys.computer/about/#lady>
+SPDX-License-Identifier: MPL-2.0
+-->
+<!--
+⁌ ⛩📰 书社 ∷ lib/expandmetadata.xslt
+
+© 2023–2024 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/>.
+-->
+<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#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:书社="urn:fdc:ladys.computer:20231231:Shu1She4"
+ xmlns:书社vocab="urn:fdc:ladys.computer:20231231:Shu1She4:vocab:"
+ 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)]"/>
+ <template name="书社:process-dependencies">
+ <param name="processed"/>
+ <param name="unprocessed"/>
+ <variable name="queue">
+ <copy-of select="exsl:node-set($unprocessed)/书社:dependency-root"/>
+ <for-each select="exsl:node-set($unprocessed)/书社:dependency">
+ <if test="not((exsl:node-set($processed)/书社:*|preceding-sibling::书社:*|following-sibling::书社:recursive-dependency)[string()=string(current())])">
+ <copy-of select="."/>
+ </if>
+ </for-each>
+ </variable>
+ <variable name="old">
+ <copy-of select="exsl:node-set($processed)/书社:dependency-root"/>
+ <copy-of select="exsl:node-set($processed)/书社:recursive-dependency"/>
+ <for-each select="exsl:node-set($unprocessed)/书社:recursive-dependency">
+ <if test="not((exsl:node-set($processed)/书社:recursive-dependency|preceding-sibling::书社:recursive-dependency)[string()=string(current())])">
+ <copy-of select="."/>
+ </if>
+ </for-each>
+ <for-each select="exsl:node-set($processed)/书社:dependency">
+ <if test="not(exsl:node-set($unprocessed)/书社:recursive-dependency[string()=string(current())])">
+ <copy-of select="."/>
+ </if>
+ </for-each>
+ <copy-of select="$queue"/>
+ </variable>
+ <variable name="new">
+ <for-each select="exsl:node-set($queue)/书社:*">
+ <for-each select="$files[@rdf:about=string(current()) and nie:interpretedAs/nfo:PlainTextDocument]">
+ <variable name="parent" select="@rdf:about"/>
+ <variable name="subdir">
+ <choose>
+ <when test="starts-with($parent, 'about:shushe?include=')">
+ <text>/includes/</text>
+ </when>
+ <when test="starts-with($parent, 'about:shushe?source=')">
+ <text>/sources/</text>
+ </when>
+ </choose>
+ </variable>
+ <for-each select="document(concat($builddir, $subdir, @nfo:fileName), .)//书社:link[@xlink:show='embed']">
+ <if test="exsl:node-set($old)/书社:dependency-root[string()=string(current()/@xlink:href)]">
+ <书社:recursive-dependency>
+ <value-of select="$parent"/>
+ </书社:recursive-dependency>
+ </if>
+ <if test="$files/@rdf:about[string()=string(current()/@xlink:href)]">
+ <书社:dependency>
+ <value-of select="@xlink:href"/>
+ </书社:dependency>
+ </if>
+ </for-each>
+ </for-each>
+ </for-each>
+ </variable>
+ <choose>
+ <when test="exsl:node-set($new)/书社:dependency">
+ <call-template name="书社:process-dependencies">
+ <with-param name="processed">
+ <copy-of select="$old"/>
+ </with-param>
+ <with-param name="unprocessed">
+ <copy-of select="$new"/>
+ </with-param>
+ </call-template>
+ </when>
+ <otherwise>
+ <copy-of select="$old"/>
+ </otherwise>
+ </choose>
+ </template>
+ <template match="rdf:RDF/nfo:LocalFileDataObject[not(nie:interpretedAs/nfo:Folder or 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>
+ </copy>
+ </template>
+ <template match="rdf:RDF/nfo:LocalFileDataObject[nie:interpretedAs/nfo:PlainTextDocument]" priority="1">
+ <variable name="parsed" select="document(concat($builddir, '/sources/', @nfo:fileName), .)"/>
+ <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=')"/>
+ </otherwise>
+ </choose>
+ </variable>
+ <variable name="dependencies-fragment">
+ <apply-templates select="." mode="书社:dependencies"/>
+ </variable>
+ <variable name="dependencies" select="exsl:node-set($dependencies)"/>
+ <copy>
+ <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>
+ <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()">
+ <copy>
+ <apply-templates select="@*|node()"/>
+ </copy>
+ </template>
+ <template match="nfo:LocalFileDataObject" mode="书社:dependencies">
+ <if test="nie:interpretedAs/nfo:PlainTextDocument">
+ <call-template name="书社:process-dependencies">
+ <with-param name="unprocessed">
+ <书社:dependency-root>
+ <value-of select="@rdf:about"/>
+ </书社:dependency-root>
+ </with-param>
+ </call-template>
+ </if>
+ </template>
+</transform>
-->
<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#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:书社="urn:fdc:ladys.computer:20231231:Shu1She4"
+ xmlns:书社vocab="urn:fdc:ladys.computer:20231231:Shu1She4:vocab:"
version="1.0"
>
- <variable name="files" select="/rdf:RDF/nfo:LocalFileDataObject"/>
- <template name="书社:process-dependencies">
- <param name="processed"/>
- <param name="unprocessed"/>
- <variable name="queue">
- <copy-of select="exsl:node-set($unprocessed)/书社:dependency-root"/>
- <for-each select="exsl:node-set($unprocessed)/书社:dependency">
- <if test="not((exsl:node-set($processed)/书社:*|preceding-sibling::书社:*|following-sibling::书社:recursive-dependency)[string()=string(current())])">
- <copy-of select="."/>
- </if>
- </for-each>
- </variable>
- <variable name="old">
- <copy-of select="exsl:node-set($processed)/书社:dependency-root"/>
- <copy-of select="exsl:node-set($processed)/书社:recursive-dependency"/>
- <for-each select="exsl:node-set($unprocessed)/书社:recursive-dependency">
- <if test="not((exsl:node-set($processed)/书社:recursive-dependency|preceding-sibling::书社:recursive-dependency)[string()=string(current())])">
- <copy-of select="."/>
- </if>
- </for-each>
- <for-each select="exsl:node-set($processed)/书社:dependency">
- <if test="not(exsl:node-set($unprocessed)/书社:recursive-dependency[string()=string(current())])">
- <copy-of select="."/>
- </if>
- </for-each>
- <copy-of select="$queue"/>
- </variable>
- <variable name="new">
- <for-each select="exsl:node-set($queue)/书社:*">
- <for-each select="$files[@rdf:about=string(current()) and nie:interpretedAs/nfo:PlainTextDocument and dct:hasFormat/*/nie:interpretedAs/*[@nie:mimeType='application/xml']]">
- <variable name="parent" select="@rdf:about"/>
- <for-each select="document(dct:hasFormat/*[nie:interpretedAs/*[@nie:mimeType='application/xml']]/@nfo:fileUrl[1])//书社:link[@xlink:show='embed']">
- <if test="exsl:node-set($old)/书社:dependency-root[string()=string(current()/@xlink:href)]">
- <书社:recursive-dependency>
- <value-of select="$parent"/>
- </书社:recursive-dependency>
- </if>
- <if test="$files/@rdf:about[string()=string(current()/@xlink:href)]">
- <书社:dependency>
- <value-of select="@xlink:href"/>
- </书社:dependency>
- </if>
- </for-each>
- </for-each>
- </for-each>
- </variable>
- <choose>
- <when test="exsl:node-set($new)/书社:dependency">
- <call-template name="书社:process-dependencies">
- <with-param name="processed">
- <copy-of select="$old"/>
- </with-param>
- <with-param name="unprocessed">
- <copy-of select="$new"/>
- </with-param>
- </call-template>
- </when>
- <otherwise>
- <copy-of select="$old"/>
- </otherwise>
- </choose>
- </template>
- <template match="nfo:LocalFileDataObject" mode="书社:dependencies">
- <if test="nie:interpretedAs/nfo:PlainTextDocument">
- <call-template name="书社:process-dependencies">
- <with-param name="unprocessed">
- <书社:dependency-root>
- <value-of select="@rdf:about"/>
- </书社:dependency-root>
- </with-param>
- </call-template>
- </if>
- </template>
<template match="/">
- <for-each select="$files[nie:interpretedAs/nfo:PlainTextDocument]">
- <variable name="parent" select="@rdf:about"/>
- <variable name="dependencies">
- <apply-templates select="." mode="书社:dependencies"/>
- </variable>
+ <for-each select="rdf:RDF/nfo:LocalFileDataObject[nie:interpretedAs/nfo:PlainTextDocument]">
<value-of select="@rdf:about"/>
<text>
</text>
- <for-each select="exsl:node-set($dependencies)/书社:recursive-dependency">
+ <for-each select="书社vocab:hasRecursiveDependencyOn/@rdf:resource">
<text>	</text>
<text>-</text>
<value-of select="."/>
<text>
</text>
</for-each>
- <for-each select="exsl:node-set($dependencies)/书社:dependency">
+ <for-each select="书社vocab:hasDependencyOn/@rdf:resource">
<text>	</text>
<value-of select="."/>
<text>
</text>
<transform
xmlns="http://www.w3.org/1999/XSL/Transform"
xmlns:dct="http://purl.org/dc/terms/"
- xmlns:exslstr="http://exslt.org/strings"
- 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:书社="urn:fdc:ladys.computer:20231231:Shu1She4"
- extension-element-prefixes="exslstr"
version="1.0"
>
<template match="/">
<for-each select="/rdf:RDF/nfo:LocalFileDataObject[starts-with(@rdf:about, 'about:shushe?source=')]">
- <choose>
- <when test="nie:interpretedAs/nfo:PlainTextDocument and dct:hasFormat/*/nie:interpretedAs/*[@nie:mimeType='application/xml']">
- <variable name="destination" select="document(dct:hasFormat/*[nie:interpretedAs/*[@nie:mimeType='application/xml']]/@nfo:fileUrl[1])/*/@书社:destination"/>
- <value-of select="@rdf:about"/>
- <text>|</text>
- <choose>
- <when test="$destination">
- <value-of select="$destination"/>
- </when>
- <otherwise>
- <value-of select="substring-after(@rdf:about, 'about:shushe?source=')"/>
- </otherwise>
- </choose>
- <text>
</text>
- </when>
- <otherwise>
- <value-of select="@rdf:about"/>
- <text>|</text>
- <value-of select="substring-after(@rdf:about, 'about:shushe?source=')"/>
- <text>
</text>
- </otherwise>
- </choose>
+ <value-of select="@rdf:about"/>
+ <text>|</text>
+ <value-of select="dct:hasFormat/nfo:LocalFileDataObject[@dct:creator='urn:fdc:ladys.computer:20231231:Shu1She4']/@nfo:fileName"/>
+ <text>
</text>
</for-each>
</template>
<output method="text" encoding="UTF-8"/>