实际上 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) 您无法使用另一个节点的值来验证节点/属性/attribute.
2) 这是一个限制: XSD 文件中定义的元素必须仅使用一种数据类型定义。 [在上面的示例中,对于出现在另一个 <parent>
节点中的 <child_two>
,不能定义除 int 以外的数据类型。
3)您不能忽略元素和属性的验证,即,如果一个元素/属性出现在 XML 中,必须在对应的 XSD 中明确定义。虽然 <xsd:any>
的使用允许它,但它有自己的规则。坚持会导致验证错误。我曾尝试过类似的方法,但肯定没有成功,here is the Q&A
XSD 有什么可能:
1) 您可以测试 XML 节点的正确层次结构。 [xsd 定义了哪个孩子应该在哪个父母之下,等等,遵守哪个将被视为错误,在上面的例子中,child_two 不能是 root 的直接孩子,但它是“parent”标签的孩子,而它又是一个“根”节点的子节点,有一个层次结构..]
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 并基于 XML 编写。 XSD 定义了可以出现在文档中的元素和结构,而 XML 没有。 XSD 可确保正确解释数据,而 XML 则不能。 XSD 文档被验证为 XML,但相反的情况可能并不总是如此。 XSD 比 XML 更擅长捕捉错误。
XSD 定义了可以在文档中使用的元素,这些元素与要编码的实际数据相关。例如:表示为 2010 年 1 月 12 日的日期可以表示 1 月 12 日或 12 月 1 日。在 XSD 文档中声明日期数据类型,确保它遵循 XSD 规定的格式。
简单的 XML 示例:
<school>
<firstname>John</firstname>
<lastname>Smith</lastname>
</school>
XSD OF ABOVE XML(解释):
<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 数据的方法。
借助额外的属性,我们可以执行多个操作。
在 xsd 上执行任何任务都比 xml 简单。
XML 与 XSD
XML 定义了 elements and attributes 的语法,用于在 well-formed 文档中构建数据。
XSD (aka XML Schema) 与之前的 DTD 一样,通过使用户能够定义 {2 } 在 valid XML 文档中。
基本上,XSD 文件定义了 XML 文件的外观。它是一个 Schema 文件,它定义了 XML 文件的结构。所以它指定了可能的字段是什么以及它们将是什么大小。
XML 文件是 XSD 的一个实例,因为它使用 XSD 中定义的规则。
XML 比 f.ex 有更广泛的应用。 HTML。它没有内在的或默认的“应用程序”。因此,尽管您可能并不真正关心网页是否也受允许的内容管理,但从作者的角度来看,您可能希望精确定义 XML 文档可能包含和可能不包含的内容。
这就像设计一个数据库。
XML 技术的特点是它们本质上是文本的。使用 XSD,这意味着您拥有一个可以“插入”到 PHP 等文本处理工具的数据结构定义框架。因此,您不仅可以操作数据本身,还可以非常轻松地更改和记录结构,甚至自动生成前端。
这样看来,XSD 是数据 (XML) 和数据处理工具之间的“粘合剂”或“中间件”。