网站首页 > 技术文章 正文
昨天在提供了 DITA 技巧基础上,读者提出,仍然遇到发布后的链接破坏现象。为此,在昨天解决了正确解析链接关系基础上,本文提供了 DITA 发布后解决链接显示的方案。
介绍
DITA 1.3 中引入的作用域键 SCOPED KEY 允许在 DITA 内容中表示跨书籍引用(也称为交叉可交付引用)。但是,DITA-OT 尚未为此类引用提供开箱即用 plugin 的发布支持。
本文披露了一个 DITA-OT 插件和一个 perl 后处理脚本,当它们一起使用时,可以解析 DITA-OT 的 HTML 输出中的跨书链接。
有关范围键的更多信息,请参阅 DITA 1.3 专题文章: DITA 1.3 中的范围键 SCOPED
KEY。
这个怎么运作
为了使后处理解决方案起作用,我们需要在发布的 HTML 输出中保留关键引用和关键定义。
提供的 DITA-OT 插件执行以下操作:
- 为了保留关键引用,插件将和元素(及其特化)的未解析范围@keyref属性转换为特殊格式的 HTML引用:<xref><link>@href<p class="p">See <a href="keyref://B.topic_B">this topic in book B</a>.</p>
- 为了保留键定义,插件将最终 DITA 映射的“仅键”版本复制到每个输出目录:
out/bookA/index.html
out/bookA/keys-bookA.ditamap <---
...book A content files...
out/bookB/index.html
out/bookB/keys-bookB.ditamap <---
...book B content files...
out/bookC/index.html
out/bookC/keys-bookC.ditamap <---
...book C content files...
- 在应用了所有过滤和分块之后,这个“仅键”映射文件包含@keys/@href定义对:
% cat out/bookA/keys-bookA.ditamap
<map>
<title>Book A Online Help</title>
<topicref keys="topic1" href="bookA_content/topic1.dita"/>
<topicref keys="topic2" href="bookA_content/topic2.dita">
<topicref keys="topic2a" href="bookA_content/topic2a.dita"/>
<topicref keys="topic2b" href="bookA_content/topic2b.dita"/>
</topicref>
</map>
.dita最终地图中的文件直接对应于 HTML 输出中的.html或.htm文件。
发布所有可交付成果后,提供的 perl 脚本href="keyref://..."会对元素进行后处理以引用实际的 HTML 目标文件。无论发布输出的目录结构如何,脚本还会针对引用和引用 HTML 文件之间的相对文件系统路径差异进行调整。
书籍范围首先与输出目录名称匹配(以支持从单个地图发布的多本书),然后是地图名称(以处理简单情况)。
入门
您可以在本机 linux 计算机或安装了 Windows Subsystem for Linux (WSL) 的 Windows 10 计算机上运行此脚本。
先决条件
PERL 脚本
在使用此脚本之前,您必须安装以下 perl 模块:
sudo apt update
sudo apt install cpanminus
sudo cpanm install XML::Twig utf8::all
DITA-OT
你必须在你的 DITA-OT 中从这个 repo 安装以下插件:
plugins/com.synopsys.preserve.keyrefs/
安装
下载或克隆存储库,然后将其bin/目录放在您的搜索路径中,以便fix_html_xbook_links.pl在您的搜索路径中找到该实用程序。
例如,在默认的 bash shell 中,将此行添加到您的\~/.profile文件中:
PATH=~/git/DITA-fix-html-xbook-links/bin:$PATH
将插件复制到您的 DITA-OTplugins/目录,然后运行
dita --install
转换用途
要保留关键信息,请在preserve.keys参数设置为 的情况下运行转换yes:
dita -Dpreserve.keys=yes ... -o out/book1
dita -Dpreserve.keys=yes ... -o out/book2
...
后处理使用
该实用程序处理一个或多个包含来自 DITA-OT 的 HTML 输出的目录,然后就地修改文件以解析可交叉传递的链接。
不带参数或 with 运行该实用程序-help以查看用法:
$ fix_html_xbook_links.pl
Usage:
<html_dir> [<html_dir> ...]
Set of directories containing HTML output from the DITA-OT
--keep-keyrefs
Keep @data-keyref attributes in HTML (to allow for future incremental updates)
要对内容进行后处理,请指定一个或多个包含所有已发布输出的目录名称:
fix_html_xbook_links.pl ./out
您不需要单独指定每个可交付的输出目录。该实用程序递归搜索keys- bookname .ditamap 文件,然后将这些子目录与该书的内容等同起来。
例子
https://github.com/dcwise/DITA-fix-xbook-html-links
实施说明
的keyref://参考文献都通过一个perl常规表达式,其值的子程序,以确定目标转换。我尝试了各种 HTML 解析解决方案,但它们都不起作用,或者它们显着降低了文件结构,或者它们非常慢。
限制
请注意此脚本和此流程的以下限制:
- bookname.scopename.keyname不支持地图 ( )内的范围。
- 跨书籍范围名称必须与书籍地图名称或输出目录名称匹配。
- 尽管仅键映射文件包含原始<mapref>引用,但不使用或交叉检查信息的一致性。
- DITA-OT 会为跨书籍的纯资源地图引用生成错误消息,但它们似乎是无害的。
如果对文档结构化技术感兴趣,请联系我们
https://raycontentech.com/#/companyintroduction
猜你喜欢
- 2024-11-13 c++ 创建一个随机访问迭代器(c++怎么随机产生一个数)
- 2024-11-13 直播预告|敲黑板,划重点!智能模型平台知识点讲解
- 2024-11-13 Excel中如何每隔3行求和(隔3行求和公式excel)
- 2024-11-13 铭说 | Sunburst供应链攻击解析(供应链buysell交易模式)
- 2024-11-13 Nginx+keepalived 实现高可用,防盗链及动静分离配置详解
- 2024-11-13 Nginx + FastCGI 程序(C/C++) 搭建高性能web service
- 2024-11-13 数据库 CTREATE INDEX 用法(数据库replicate用法)
- 2024-11-13 点点滴滴学5G—NR CCE起始位置计算方法
- 2024-11-13 聊聊 C++ 中的四种类型转换符(c++4种类型转换)
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)