正确使用外部DTD for XML

时间:2014-06-30 13:39:18

标签: xml validation external dtd xml-dtd

我有以下文章.dtd

<!ELEMENT ARTICLE (HEADLINE,BYLINE,LEAD,BODY,NOTES)>
<!ELEMENT HEADLINE (#PCDATA)>
<!ELEMENT BODY (#PCDATA)>

<!ATTLIST ARTICLE AUTHOR CDATA #REQUIRED>

和article.xml

<?xml version="1.0" standalone="no"?>
<!DOCTYPE ARTICLE SYSTEM "article.dtd">
<ARTICLE AUTHOR="T. Daniel">
    <HEADLINE>Title</HEADLINE>
    <BODY>Details</BODY>
</ARTICLE>

我使用谷歌浏览器浏览器打开xml文件,当我访问页面源时,我只获取了article.xml的内容。

是不是页面源应该合并这两个文件(显示文档类型定义和xml文档)?如果是这样,为什么我的例子中没有发生这种情况?如果没有,我应该如何根据我想要的dtd文件检查我的xml是否被写入?

提及:article.dtd和article.xml位于同一文件夹中。

1 个答案:

答案 0 :(得分:2)

  

是不是页面源应该合并这两个文件(同时显示文档类型定义和xml文档)?

不,它不应该合并这两个文件。

大多数浏览器不加载外部DTD。我找不到Chrome的明确参考,但我认为它与Mozilla / Firefox(https://developer.mozilla.org/en-US/docs/XML_in_Mozilla#DTDs_and_Other_External_Entities)的工作方式类似。

  

我应该如何检查我的xml是否是根据我想要的dtd文件编写的?

通过适当的验证器运行它,例如xmllintlibxml2附带的命令行工具):

$ xmllint --valid article.xml

此命令的输出:

<?xml version="1.0" standalone="no"?>
<!DOCTYPE ARTICLE SYSTEM "article.dtd">
<ARTICLE AUTHOR="T. Daniel">
    <HEADLINE>Title</HEADLINE>
    <BODY>Details</BODY>
</ARTICLE>
article.xml:6: element ARTICLE: validity error : Element ARTICLE content does not follow the DTD, expecting (HEADLINE , BYLINE , LEAD , BODY , NOTES), got (HEADLINE BODY )
</ARTICLE>
          ^