Sou*_*ceC 1 xml dtd xml-namespaces
我\xe2\x80\x99是 XML 的新手,目前正在学习文档类型声明。无论如何,在 DTD 正文中声明元素时,元素名称必须与 XML 文档中的完全相同,包括任何命名空间前缀,这意味着用户可以\xe2\x80\x99 定义自己的命名空间,但必须使用前缀在 DTD 中定义。
\n\na) 我假设即使我们必须使用 DTD 中定义的前缀,我们仍然可以选择这些前缀指向哪些 URI?
\n\nb) 假设我们(在 DTD 中)声明一个元素,其中 pers 是命名空间前缀,这是否意味着 XML 文档中该元素的所有出现都需要包含前缀 \xe2\x80\x9cpers\xe2\x80\x9d?如果是这样的话,那就意味着通过 DTD,我们可以\xe2\x80\x99t 使用默认的命名空间功能?!
\n\n谢谢
\n\n编辑:
\n\nA)
\n\n\n\n\n实际上,除非有特别充分的理由,或者您有简单的语法要求并且不需要命名空间,否则您应该考虑使用 XML 模式。
\n
我确实计划改用 XML Schema,但我\xe2\x80\x99d 也喜欢学习 DTD 的基础知识。
\n\nb)
\n\n\n\n\n\xe2\x80\xa6 没有命名空间 URI 的概念(也没有默认命名空间)。
\n
如果我们在 DTD 中声明名为 \xe2\x80\x9cxmlns\xe2\x80\x9d 的属性:
\n\n<!ATTLIST contact xmlns CDATA #REQUIRED> \nRun Code Online (Sandbox Code Playgroud)\n\n那么XML文档可以使用默认命名空间功能(这里子元素<name>位于默认命名空间中):
...\n<contact xmlns=\xe2\x80\x9dwww.somewhere.com\xe2\x80\x9d \xe2\x80\xa6 > \n <name></name>\n</contact> \n ...\nRun Code Online (Sandbox Code Playgroud)\n\n谢谢
\nDTD 没有任何名称空间的概念。命名空间的概念是在他们构思之后引入的。
对于 XML 命名空间,重要的部分是命名空间 URI,而不是前缀;用户可以自由更改前缀。
另一方面,当在 DTD 中给定命名空间“前缀”时,前缀部分仅被视为元素名称的一部分(因为 DTD 没有命名空间概念)。因此,“前缀”不能更改,并且没有命名空间 URI(也没有默认命名空间)的概念。
实际上,除非有特别充分的理由,或者您有简单的语法要求并且不需要命名空间,否则您应该考虑使用 XML 模式。
完整的模式规范可能令人望而生畏,但我发现人们学习了某个足够的子集,而且并不那么复杂。W3Schools的人员提供了很好的基础知识入门书。
| 归档时间: |
|
| 查看次数: |
2602 次 |
| 最近记录: |