我真的很想为某些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>
答案 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声明很好。