【问题标题】:Does xsltproc "honor" the order and content specified in DTD?xsltproc 是否“尊重”DTD 中指定的顺序和内容?
【发布时间】:2020-04-08 01:05:34
【问题描述】:

我想弄清楚我是否在 xml 文档中正确地声明了我的 DTD 元素。据我所知,xsltproc 或 xmllint 都没有检测到以下文档中的有效性错误:

<!DOCTYPE basic-dtd [
        <!ENTITY title "The Book of Love">
        <!ENTITY author "Jeffrey Halcomb">

        <!ELEMENT basic-dtd (title,author,subject,checked-out)>                                                                                                                   
        <!ELEMENT title (#PCDATA)>
        <!ELEMENT author (#PCDATA)>
        <!ELEMENT checked-out EMPTY>
]>

<basic-dtd>
        <author>&author;</author>
        <title>&title;</title>
        <subject>A treatise on love as a driving elemental force in nature</subject>
        <checked-out>Yes</checked-out>
</basic-dtd>

在我的 doctype 指令中,我(相信)我已经指定:

  • basic-dtd 元素中元素的正确顺序是标题、作者、主题和已签出。
  • “已签出”元素不应包含任何数据(PCDATA、CDATA 或子元素)

然而,当我对这个 xml (xsltproc basic-dtd.xsl basic-dtd.xml) 运行以下样式表时,它没有报告任何错误/警告。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >                                                                                                  
        <xsl:output omit-xml-declaration="no" indent="yes"/>
        <xsl:strip-space elements="*"/>
        <xsl:template match="/basic-dtd">
          <xsl:copy-of select="."/>
        </xsl:template>
</xsl:stylesheet>

同样,当我运行 xmllint (xmllint --noent basic-dtd.xml) 时,它不会报告任何错误。

xsltproc 和 xmllint(带 --noent)确实会处理实体,如果使用未知实体,则会出错。

我是在使用苹果处理器来转换/打印 orange-xml(该工作的工具错误),还是这是一个已知功能?

谢谢,

汤姆

【问题讨论】:

  • 我不记得 xsltproc 进行了验证。您是否尝试过使用 xmllint 的 --valid 命令行参数?
  • 是的!谢谢!那成功了。我认为有趣的是,可以在样式表、模式等中使用 DTD... 只是在有限的范围内:- 向元素添加默认/固定值,以及 - 使用实体在输出中创建 xsl:params/text。跨度>
  • 总是有模式感知 XSLT 处理器的选项,例如 Saxon PE/HE
  • 添加了我的 cmets 作为答案。

标签: xml xslt dtd xmllint


【解决方案1】:

我不记得 xsltproc 进行了验证。

尝试将--valid 命令行参数与xmllint 结合使用。

还可以选择使用架构/dtd 感知 XSLT 处理器,例如 Saxon PE/HE

【讨论】:

    猜你喜欢
    • 2020-07-09
    • 1970-01-01
    • 2020-03-13
    • 2010-11-08
    • 2016-10-13
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多