3

我正在自学 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这意味着数据将被其他人解析,并且在这里排除符号会有所不同吗?

4

1 回答 1

1

你说:

当我在右括号后省略任何符号时,这意味着这些标签中的每一个只能在学生标签内出现一次。

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

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

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

<!ELEMENT elem (#PCDATA|anotherElem)*>
于 2013-04-08T19:11:03.267 回答