dtd / xml-我做错了什么?

时间:2017-09-15 13:45:56

标签: xml dtd

我真的很想为某些xml代码编写dtd。尽管对此有所了解,但我仍然被困在哪里。我们将非常感激地收到任何建议。我知道这是基本的,但我是新手,并没有点击。

这是dtd(修改)......

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE Refs [
<!ELEMENT Refs (Book)>
<!ELEMENT Book (author,editor,pdate,title,pplace,pname)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT editor (#PCDATA)>
<!ELEMENT pdate (#PCDATA)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT pplace (#PCDATA)>
<!ELEMENT pname (#PCDATA)>
]>

这是xml文件......

<Refs>
<Book>
    <author>RANGANATHAN</author>
    <editor>anon</editor>
    <pdate>1967</pdate>
    <title>PROLEGOMENATOLIBRARYCLASSIFICATION</title>
    <pplace>NEWYORKNY</pplace>
    <pname>ASIAPUBLISHINGHOUSE</pname>
</Book>
 </Refs>

2 个答案:

答案 0 :(得分:0)

根据您发布的内容,您的文档必须以Refs作为文档(顶级)元素,但您的示例XML具有Book作为文档元素。因此,您可以更改文档并将所有内容括在Refs顶级元素中。

如果XML PI出现问题,那么如果您只处理XML标记,则可以将其删除;它不是XML所必需的,只有在打算在应用程序中使用其他标记(如HTML和/或SGML)时才有用。

prolog末尾的]>字符序列之间不能有空格,因此请删除换行符。

您作为DTD显示的内容实际上是一个文档序言,必须是XML文件本身的开头;如果你想要它在一个单独的.dtd文件中,请省略DOCTYPE声明并删除结束]>,以便外部.dtd文件只包含元素声明。然后,您可以使用.dtd作为XML文件中的第一行(其中<!DOCTYPE Refs SYSTEM "refs.dtd">仅包含元素声明)来引用外部refs.dtd文件。

XML PI(据我所知)并不是外部DTD的一部分,而是仅用于文档序言的开头。

另外,DTD开头的垃圾字符是什么?

答案 1 :(得分:0)

我不确定您使用的是哪种验证器,因此我不会评论prolog所在的位置。 (有关使用外部DTD的说明,请参阅External referenced DTD in XML。根据您用于验证XML的内容,可能不需要这样做。)

要修复当前设置,请尝试将DOCTYPE Refs更改为DOCTYPE Book(doctype必须与根元素匹配)。或者,您可以添加其他答案中提到的Refs根元素。

另一个答案还提到您需要在关闭doctype声明时删除]>之间的换行符。虽然将]>放在同一行上很常见,it is not required

您还需要删除,这是BOM(字节顺序标记)未正确编码时的样子。在<?xml声明之前,您不能拥有任何字符。外部DTD中的XML声明很好。