XML文档可以同时遵循DTD和XML Schema吗?

3
XML文档同时遵循DTD和Schema是否合法?两者是否会冲突?

在我的情况下,我有一个作业问题要求我为之前编写的XML文档编写DTD和Schema。 - CodyBugstein
2个回答

2
从技术上讲,我认为您可能会遇到DTD无法识别用于引用模式的属性(命名空间声明和模式位置)的问题。
但是,我认为这取决于您如何验证XML以及是否可以忽略DTD进行验证,如果指定了模式。
此外,在您的任务中,您确定必须从同一个XML实例引用两者吗?也许您可以有2个版本的XML;一个引用DTD,另一个引用模式?
以下是另外两个可能的选项...
声明模式属性:
<!DOCTYPE doc [
<!ELEMENT doc (test)>
<!ATTLIST doc
          xmlns:xsi CDATA #IMPLIED
          xsi:noNamespaceSchemaLocation CDATA #IMPLIED>
<!ELEMENT test (#PCDATA)>
]>
<doc xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="test.xsd">
    <test>Test Doc</test>
</doc>

使用处理指令引用模式:

使用处理指令引用模式:

<!DOCTYPE doc [
<!ELEMENT doc (test)>
<!ELEMENT test (#PCDATA)>
]>
<?xml-model href="test.xsd"?>
<doc>
    <test>Test Doc</test>
</doc>

是的,我想我可以复制XML文件并使用单独的文件来处理模式部分。 - CodyBugstein
命名空间声明可以包含在DTD中(如果省略,XHTML文档在通过DTD验证器运行时将无效...例如:*元素html缺少xmlns属性。值应为:http://www.w3.org/1999/xhtml*)。将模式链接到XML文档的处理指令是PI,因此在验证期间不予考虑。 - Quentin
@Quentin - 这将是一个不错的补充,而不是假设 OP 知道你在说什么。 - Daniel Haley
1
猜测为什么OP认为这两者可能会冲突可能会导致非常长的答案 :) (如果您想使用xsi命名空间将模式链接到文档,那么您也可以在DTD中允许或强制执行) - Quentin

1

一个XML文档可以同时指定遵循DTD和Schema吗?

可以。

这两者不会相互冲突吗?

只有在其中一个强制执行另一个禁止的内容时才会发生冲突(在这种情况下,声称同时遵循两者将是一件奇怪的事情)。


我所指的“它们会不会冲突”是指在XML文档中声明其为模式实例的语句是否与DTD下的定义发生冲突? - CodyBugstein

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接