2013-04-15 60 views

回答

1

从技术上讲,我认为你会遇到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.xsl"?> 
<doc> 
    <test>Test Doc</test> 
</doc> 
+0

是的,我想我可以复制XML文件,并为模式部分使用单独的文件。 – CodyBugstein

+0

DTD中可以包含名称空间声明(如果不填写,则在通过DTD验证程序运行时XHTML文档无效...例如*缺少元素html的xmlns属性,值应该是:'http://www.w3.org/1999/xhtml'*)。将模式链接到XML文档的处理指令是PI,因此在验证期间不予考虑。 – Quentin

+0

http://www.w3.org/TR/xml-model/#d0e676 – Quentin

1

XML文档指定它是否遵循DTD和Schema是否合法?

不会在两个相冲突彼此?

只有当他们中的一个强制要求另一个禁止时(在这种情况下声称遵循这两者将是一件奇怪的事情)。

+0

我的意思是“它们不会冲突”是不是XML文档中声明它是模式实例与DTD下其定义冲突的语句? – CodyBugstein

+0

不,为什么呢? – Quentin

相关问题