我正在自学 XML,这是我写的第一个 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
。现在,因为我有一个 *
,所以我可以让 零个或更多
学生在里面。但我想它应该改为 +
(一个或多个),因为它更有意义?
student
里面是姓名、类(class)学期和方案。当我在右括号后省略任何符号时,这意味着这些标签中的每一个只能在学生标签内出现一次。这意味着一个学生不能有超过一个名字,超过一个学期等
最后,名称、类(class)、学期和方案有 #PCDATA
,这意味着数据将由其他人解析,此处排除该符号会有所不同吗?
最佳答案
你说:
When I leave out any symbols after the closing parentheses then it means that each of these tags can appear only once inside the student tag.
我只想补充一点,每个标签必须出现一次;它们不是可选的,除非您有 ?
或 *
。此外,它们必须按该顺序出现(因为您使用了 ,
)。
#PCDATA
表示已解析的字符数据,它基本上是将由解析器解析的文本。例如,文本“Sample &text;
”将被解析,&text;
实体引用将被解析。
唯一真正需要#PCDATA
符号(出现指示符)的情况是当您有混合内容(文本和元素)时。它也必须是 *
:
<!ELEMENT elem (#PCDATA|anotherElem)*>
关于xml - 我对 DTD 的理解正确吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15886471/