我有以下文章.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位于同一文件夹中。
答案 0 :(得分:2)
是不是页面源应该合并这两个文件(同时显示文档类型定义和xml文档)?
不,它不应该合并这两个文件。
大多数浏览器不加载外部DTD。我找不到Chrome的明确参考,但我认为它与Mozilla / Firefox(https://developer.mozilla.org/en-US/docs/XML_in_Mozilla#DTDs_and_Other_External_Entities)的工作方式类似。
我应该如何检查我的xml是否是根据我想要的dtd文件编写的?
通过适当的验证器运行它,例如xmllint(libxml2附带的命令行工具):
$ 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>
^