【发布时间】:2010-02-25 12:43:43
【问题描述】:
可扩展标记语言 (XML) 和 XML 模式 (XSD) 有什么区别?
【问题讨论】:
可扩展标记语言 (XML) 和 XML 模式 (XSD) 有什么区别?
【问题讨论】:
实际上 XSD 就是 XML 本身。其目的是验证另一个 XML 文档的结构。 XSD 对于任何 XML 都不是强制性的,但它确保 XML 可以用于某些特定目的。 XML 仅包含适当格式和结构的数据。
【讨论】:
举个例子
<root>
<parent>
<child_one>Y</child_one>
<child_two>12</child_two>
</parent>
</root>
并为此设计一个 xsd:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="parent">
<xs:complexType>
<xs:sequence>
<xs:element name="child_one" type="xs:string" />
<xs:element name="child_two" type="xs:int" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
XSD 无法实现的功能:想先写它,因为列表非常小
1) 您无法使用另一个节点/属性的值来验证节点/属性。
2) 这是一个限制: XSD 文件中定义的元素必须仅使用一种数据类型定义。 [在上面的例子中,<child_two>出现在另一个<parent>节点中,不能定义除int以外的数据类型。
3) 不能忽略元素和属性的验证,即如果元素/属性出现在XML 中,则必须在相应的XSD 中明确定义。虽然<xsd:any> 的使用允许它,但它有自己的规则。坚持会导致验证错误。我曾尝试过类似的方法,但肯定没有成功,here is the Q&A
XSD 有什么可能:
1) 您可以测试 XML 节点的正确层次结构。 [xsd 定义了哪个孩子应该在哪个父母之下,等等,遵守哪个将被视为错误,在上面的例子中,child_two 不能是 root 的直接孩子,但它是“父母”标签的孩子,而它又是一个“根”节点的子节点,有一个层次结构..]
2)您可以定义节点值的数据类型。 [在上面的例子中 child_two 不能有任何其他数据而不是数字]
3)您还可以定义自定义数据类型,[例如,对于节点<month>,可能的数据可以是 12 个月之一..因此您需要在写入所有 12 个月名称的新数据类型中定义所有 12 个月作为枚举值 .. 如果输入 XML 包含除这 12 个值之外的任何其他值,则验证将显示错误 .. ]
4) 可以对元素的出现进行限制,使用 minOccurs 和 maxOccurs,默认值为 1 和 1。
.. 还有更多...
【讨论】:
<root> <A>A</A> <B/> <C/> </root> 并且如果节点 <A> 是 <A>B</A>,则将 <B> 设为强制性,如果<A>C</A> 然后将 <C> 设为强制。
XSD:
XSD(XML 架构定义)指定如何正式描述可扩展标记语言 (XML) 文档中的元素。
Xml:
XML 旨在描述数据。它独立于软件和硬件。
它增强了以下方面。
-数据共享。
- 独立于平台。
- 提高数据的可用性。
区别:
XSD 是基于 XML 编写的。
XSD 定义了可以出现在文档中的元素和结构,而 XML 没有。
XSD 可确保正确解释数据,而 XML 则不能。
XSD 文档被验证为 XML,但可能并非总是如此。
XSD 比 XML 更擅长捕捉错误。
XSD 定义了可以在文档中使用的元素,这些元素与要编码的实际数据相关。
例如:
表示为 1/12/2010 的日期可以表示 1 月 12 日或 12 月 1 日。在 XSD 文档中声明日期数据类型,确保它遵循 XSD 规定的格式。
【讨论】:
<school>
<firstname>John</firstname>
<lastname>Smith</lastname>
</school>
<xs:element name="school">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
这里:
xs:element :定义一个元素。
xs:sequence :表示子元素仅按提到的顺序出现。
xs:complexType :表示它包含其他元素。
xs:simpleType :表示它们不包含其他元素。
类型: 细绳, 十进制, 整数, 布尔值, 日期, 时间,
借助额外的属性,我们可以执行多项操作。
在 xsd 上执行任何任务都比 xml 简单。
【讨论】:
XML 定义了elements and attributes 的语法,用于在well-formed 文档中构造数据。
XSD (aka XML Schema) 与之前的 DTD 一样,通过允许用户定义elements and attributes 在 valid XML 文档中。
【讨论】:
基本上,XSD 文件定义了 XML 文件的外观。它是一个Schema 文件,它定义了XML 文件的结构。因此,它指定了可能的字段以及它们的大小。
XML 文件是 XSD 的一个实例,因为它使用 XSD 中定义的规则。
【讨论】:
XML 比 f.ex 有更广泛的应用。 HTML。它没有内在的或默认的“应用程序”。因此,虽然您可能并不真正关心网页是否也受允许的内容管理,但从作者的角度来看,您可能希望准确定义 XML 文档可能包含和可能不包含的内容。
这就像设计一个数据库。
XML 技术的特点是它们本质上是文本的。使用 XSD,这意味着您拥有一个可以“插入”到 PHP 等文本处理工具的数据结构定义框架。因此,您不仅可以操作数据本身,还可以非常轻松地更改和记录结构,甚至自动生成前端。
这样看来,XSD 是数据 (XML) 和数据处理工具之间的“粘合剂”或“中间件”。
【讨论】: