xsltproc是否“尊重” DTD中指定的顺序和内容?

问题描述 投票:0回答:1

我试图弄清楚是否在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元素中元素的正确顺序是标题,作者,主题和签出。
  • 元素'checked-out'不应包含任何数据(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(该作业使用了错误的工具),还是已知功能?

谢谢,

汤姆

xml xslt dtd xmllint
1个回答
0
投票

我不记得xsltproc在做验证。

尝试将--valid命令行arg与xmllint一起使用。

还有使用Saxon PE/HE之类的支持模式/ dtd的XSLT处理器的选项。

© www.soinside.com 2019 - 2024. All rights reserved.