我是 XML 新手。我有两个引用相同 XSD 的 XML。那么我可以假设两个 XML 的结构总是相同的吗?
2 回答
这取决于 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 文档,您只是不能在所有情况下都做出这样的假设。
这取决于您的意思是“相同的结构”。
假设您有两个用 Java 编写的程序:
- 一个程序只打印“Hello world!” 屏幕上。
- 另一个程序绘制一些复杂的分形图像(例如 Mandelbrot 集)。
这些程序是否具有相同的结构?他们当然会!因为两者都是用 Java 编写的。相同的 Java 编译器/Java 机器可以执行它们(无论是在哪个硬件或操作系统上)!但这里的相似性结束了。毕竟,这些是非常不同的程序。
XML 模式也是如此。
每个有效的 XML 模式都定义了另一种标记语言—— XML 的扩展(也称为XML 词汇表)。这包括特定元素和属性,以及该语言允许的它们之间的各种可能关系。
请注意,XML是eXtensible Markup Language的首字母缩写词,因此 XML 模式实际上与“XML”这个词的文字含义相同。
XSD(XML 模式定义语言)本身就是那种语言——XML 的一种特殊扩展。XSLT 是另一个例子。
那么,两个符合相同 XML 模式的 XML 是否具有相同的结构?是的,他们做到了!它们是用相同的 XML 词汇表编写的(就像两个 Java 程序一样)。这意味着,如果您有一些软件可以使用特定的 XML 词汇表并对其进行特殊处理,那么该软件将同样能够处理您的两个 XML(无论它们实际包含什么)。遵守相同的 XML 模式将确保这一点!
但是到此为止,相似性就结束了——就像两个Java程序之间一样,它们可能就像一个原子和一个星系一样不同。