使用result-document()将深层嵌套的XML文档拆分为多个输出文件时,是否有一种方法可以重写@href值以指向新文档中的ID?例如,将书籍分成多个文档,每个文档都成为一个新文件,以book-part / @ id命名。在第1章的输出文件中,第2章的输出文件中可能存在指向目标的链接,该链接值在单个文件中是相对的。现在,指向不同文件的此链接应该具有第2章的文件名,后跟#和原始目标值。有正确的链接元素(相关对象)也有变化,但它是我试图专门生成的目标值。 即链接目标模式:[outputfilename.xml]#[original-filetarget-id]
似乎我需要在原始文件中收集每个@rid的值,并在插入文件名之前检查,如果目标将在不同的文件中,并根据文件中的文件写入输出@ document-id它会输出。但是我无法理解如何知道输出文件名以及XSLT中重写目标的位置。
source xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//NLM//DTD Book DTD v2.1 20050630//EN" "book.dtd">
<book dtd-version="3.0">
<book-meta>
<book-id>123.4567890</book-id>
</book-meta>
<body>
<book-part book-part-type="chapter" id="book.123.4567890.ch01">
<book-part-meta>
<title-group>
<title>Chapter 1</title>
</title-group>
</book-part-meta>
<body>
<p> some text with a <xref rid="a">link to chapter 1</xref></p>
<p> some text with a <xref rid="b">link to chapter 2</xref></p>
<p id="a">a target id in chapter 1</p>
</body>
</book-part>
<book-part book-part-type="chapter" id="book.123.4567890.ch02">
<book-part-meta>
<title-group>
<title>Chapter 2</title>
</title-group>
</book-part-meta>
<body>
<p> some text with a <xref rid="a">link to chapter 1</xref></p>
<p> some text with a <xref rid="b">link to chapter 2</xref></p>
<p id="b">a target id in chapter 1</p>
</body>
</book-part>
</body>
</book>
输出book.123.4567890.ch01.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//NLM//DTD Book DTD v2.1 20050630//EN" "book.dtd">
<book dtd-version="3.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:oasis="http://docs.oasis-open.org/ns/oasis-exchange/table">
<book-meta>
<book-id>123.4567890</book-id>
</book-meta>
<body>
<book-part book-part-type="chapter" id="book.123.4567890.ch01">
<book-part-meta>
<title-group>
<title>Chapter 1</title>
</title-group>
</book-part-meta>
<body>
<p> some text with a <xref rid="a">link to chapter 1</xref></p>
<p> some text with a <related-object document-type="chapter" object-id="book.123.4567890.ch02.xml#b">link to chapter 2</related-object></p>
<p id="a">a target id in chapter 1</p>
</body>
</book-part>
</body>
</book>
输出book.123.4567890.ch02.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//NLM//DTD Book DTD v2.1 20050630//EN" "book.dtd">
<book dtd-version="3.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:oasis="http://docs.oasis-open.org/ns/oasis-exchange/table">
<book-meta>
<book-id>123.4567890</book-id>
</book-meta>
<body>
<book-part book-part-type="chapter" id="book.123.4567890.ch02">
<book-part-meta>
<title-group>
<title>Chapter 2</title>
</title-group>
</book-part-meta>
<body>
<p> some text with a <related-object document-type="chapter" object-id="book.123.4567890.ch01.xml#a">link to chapter 1</related-object></p>
<p> some text with a <xref rid="b" >link to chapter 2</xref></p>
<p id="b">a target id in chapter 1</p>
</body>
</book-part>
</body>
</book>
答案 0 :(得分:2)
简短的回答是:是的,你已经正确理解了你需要做什么。
对于每个超链接,您需要弄清楚其目标是否与链接源位于同一输出文件中,或者是否与其他链接相同。您已经在此处正确识别了挑战:了解新文件名将是什么。它并不像最初看起来那么困难;深吸一口气然后解决它。
你是一个外部参照元素;它有一个rid属性。您想知道:外部参照和目标是在同一个输出文件中还是在不同的文件中?要做出决定,你必须
id(@rid)
),然后从该元素上升到包含书籍部分,并找出其文件名是什么。将此值放在变量(fn-rid)中。我猜你不需要帮助将这篇散文描述转化为XSLT,但如果你这样做,请说出来。