如果两个XML引用相同的XSD,它们是相同的吗?

时间:2013-09-13 06:29:35

标签: xsd

我是XML新手。我有两个XML指的是同一个XSD。那么我可以假设两种XML的结构总是一样吗?

2 个答案:

答案 0 :(得分:0)

这取决于XSD。 XSD可能是如此宽松,以至于两个XML文件彼此无法识别。例如:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema>
    <xs:element name="root">
        <xs:complexType>
            <xs:sequence>
                <xs:any minOccurs="0" maxOccurs="unbounded" />
            </xs:sequence>
        </xs:complexType>
     </xs:element>
</xs:schema>

现在,您的XML在技术上可以包含任何内容,并且仍然可以对模式有效。

但是,一般情况下,如果您的解析器编写正确以符合特定的XSD并且您可以针对XSD验证文档,那么您的解析器将在技术上使用该XML文档,您无法在所有情况。

答案 1 :(得分:0)

这取决于你所说的“相同结构”。

假设您有两个用Java编写的程序:

  • 一个程序只打印“Hello world!”在屏幕上。
  • 另一个程序绘制了一些复杂的分形图像(例如Mandelbrot集)。

那些程序是否具有相同的结构? 他们当然会这样做! 因为两者都是用Java编写的。相同的Java编译器/ Java机器可以执行它们 (即使在哪个硬件或操作系统上)! 但这里的相似性结束了。毕竟,这些是非常不同的程序。

XML模式也是如此。

每个XML模式都有效地定义了另一种标记语言 - XML的扩展 (也称为 XML词汇)。这包括特定的元素和属性, 以及用这种语言允许的各种可能的关系。

请注意 XML 可扩展标记语言的首字母缩写,因此XML模式 实际上做的是“XML”文学所说的。

XSD(XML Schema Definition language)本身就是那种语言 - XML的特殊扩展。 XSLT是另一个例子。

那么,两个符合相同XML模式的XML是否具有相同的结构? 是的,他们这样做!它们使用相同的XML词汇表(如两个Java程序)编写。 这意味着,如果您有一些适用于该特定XML词汇表的软件 并且做了一些特别的事情,软件将同样能够处理两者 您的XML(无论它们实际包含什么)。遵循相同的XML模式将确保这一点!

但在此基础上,相似性结束 - 与两个Java程序之间相同,它们可能与原子和星系不同。