2013-04-08 89 views
3

我是自学XML,这是我写的第一个DTD。以下是DTD后面的XML数据。我对DTD的理解是否正确?

<?xml version="1.0" encoding="unicode" ?> 
<!DOCTYPE people SYSTEM "validator.dtd"> 

<people> 
    <student> 
     <name>John</name> 
     <course>Computer Technology</course> 
     <semester>6</semester> 
     <scheme>E</scheme> 
    </student> 

    <student> 
     <name>Foo</name> 
     <course>Industrial Electronics</course> 
     <semester>6</semester> 
     <scheme>E</scheme> 
    </student> 
</people> 

和DTD

<!ELEMENT people (student)*> 
<!ELEMENT student (name,course,semester,scheme)> 
<!ELEMENT name (#PCDATA)> 
<!ELEMENT course (#PCDATA)> 
<!ELEMENT semester (#PCDATA)> 
<!ELEMENT scheme (#PCDATA)> 

这里是我的DTD的理解为止。
我有一个名为people的根,里面有student。现在,因为我有*,那么我可以在里面有zero or more的学生。但我想它应该更改为+(一个或多个),因为它更有意义?

里面student是名称,课程学期和计划。当我在结束括号后忽略任何符号时,这意味着每个标签只能在学生标签内出现一次。这意味着学生不能有超过一个名称,超过一个学期等

最后,名称,课程,学期和计划有#PCDATA这意味着数据将被其他人解析和不排除符号这里有所作为?

+2

“unicode”不是有效的编码名称。使用实际编码的名称,如“UTF-8”。 – mzjn 2013-04-08 20:01:39

回答

1

你说:

当我在右括号后留出的任何符号则 意味着每个标签都可以在学生 标签内只出现一次。

我只会补充说,每个标签必须出现一次;除非您有?*,否则它们不是可选的。此外,它们必须以该顺序出现(因为您使用了,)。

#PCDATA表示解析字符数据,它基本上是解析器将解析的文本。例如,文本“Sample &text;”将被解析,并且&text;实体引用将被解析。

对于#PCDATA,您确实需要符号(发生指示符)的唯一时间是混合内容(文本和元素)。它也必须是*

<!ELEMENT elem (#PCDATA|anotherElem)*> 
相关问题