我是自学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
,这意味着数据将由其他人解析,而确实排除了这里的符号会产生影响吗?
答案 0 :(得分:1)
你说:
当我在结束括号后遗漏任何符号时,那么它 意味着每个标签只能在学生中出现一次 标签
我只想补充一点必须的每个标记出现一次;除非您有?
或*
,否则它们不是可选的。此外,它们必须按此顺序出现(因为您使用了,
)。
#PCDATA
表示解析后的字符数据,基本上是解析器将解析的文本。例如,将解析文本“Sample &text;
”并解析&text;
实体引用。
您真正需要#PCDATA
的符号(出现指示符)的唯一时间是混合内容(文本和元素)。它也必须是*
:
<!ELEMENT elem (#PCDATA|anotherElem)*>