我对DTD的理解是否正确?

时间:2013-04-08 18:38:47

标签: xml dtd

我是自学XML,这是我写的第一个DTD。下面是DTD后面的XML数据。

<?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,这意味着数据将由其他人解析,而确实排除了这里的符号会产生影响吗?

1 个答案:

答案 0 :(得分:1)

你说:

  

当我在结束括号后遗漏任何符号时,那么它   意味着每个标签只能在学生中出现一次   标签

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

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

您真正需要#PCDATA的符号(出现指示符)的唯一时间是混合内容(文本和元素)。它也必须是*

<!ELEMENT elem (#PCDATA|anotherElem)*>