首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xsltproc: docbook的doctype

xsltproc: docbook的doctype
EN

Stack Overflow用户
提问于 2015-03-07 11:06:38
回答 1查看 380关注 0票数 1

我有一个XSLT样式表,它生成DocBook XML。我使用xsl:output为docbook生成DOCTYPE声明

代码语言:javascript
复制
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" version="1.0"
              doctype-public="-//OASIS//DTD DocBook XML V4.5//EN"
             encoding="utf-8"
             indent="no" />

生成的XML文件有一个额外的空字符串,因此xmllint抱怨:

代码语言:javascript
复制
/path/docbk.xml:2: parser error : Content error in the external subset
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" ""><book>
^

这是xsltproc还是XSLT样式表的问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-07 11:51:33

SGML允许只具有公共标识符的DOCTYPE,但XML需要系统标识符--您可以单独拥有系统ID,也可以拥有公共ID和系统ID,但不仅仅是公共ID。手册指南建议

代码语言:javascript
复制
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
               "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">

它对应于

代码语言:javascript
复制
<xsl:output method="xml" version="1.0"
            doctype-public="-//OASIS//DTD DocBook XML V4.5//EN"
            doctype-system="http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
            encoding="utf-8"
            indent="no" />

事实上,xsltproc在这里确实有一个bug,但不是您认为的那个。来自xsl:output

如果指定了doctype-system 属性,则xml方法应该在紧接第一个元素之前输出一个文档类型声明。<!DOCTYPE后面的名称应该是第一个元素的名称。如果还指定了doctype-public属性,则xml方法应该输出PUBLIC,然后输出公共标识符,然后输出系统标识符;否则,它应该输出系统,然后输出系统标识符。内部子集应该是空的。除非指定了doctype-public doctype-system 属性,否则应忽略属性。

(我的大胆)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28914220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档