xml - 我对 DTD 的理解正确吗?

标签 xml dtd

我正在自学 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/

相关文章:

xml-parsing - 免费桌面应用程序流 XML : DTD?

xml - 使用 dtd 文档验证 xml 文档

android - 卡接口(interface) : Can't fit contents and text is clipped

java - 如何在 XML 中查找特定标签内的所有标签

xml - 使用批处理文件编辑 XML

xml - 如何从 XML 文件示例中导出 DTD(或其他 XML 规范格式)

validation - 我如何告诉 libxml-ruby 有关外部实体文件的信息?

xml - 注释语音语法 xml (SRGS) 中的 DTD

xml - 站点地图 URLset 中的最佳 URL 数量

java - JAXB 生成的类无法识别