可扩展标记语言(XML)和XML架构(XSD)之间有什么区别?
答案 0 :(得分:133)
实际上XSD本身就是XML。其目的是验证另一个XML文档的结构。 XSD对于任何XML都不是强制性的,但它确保XML可用于某些特定目的。 XML仅包含适当格式和结构的数据。
答案 1 :(得分:103)
举一个例子
<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的直接子项,但它是“parent”标签的子项,它依次是“root”节点的子节点,有一个层次结构..]
2)您可以定义节点值的数据类型。 [在上面的示例中,child_two不能包含任何其他数据而不是数字]
3)您还可以定义自定义data_types,[例如,对于节点<month>
,可能的数据可以是12个月中的一个..因此您需要在新数据类型中定义所有12个月的所有12个月月份名称作为枚举值。如果输入XML包含除这12个值之外的任何其他值,则验证显示错误。]
4)您可以使用minOccurs和maxOccurs对元素的出现进行限制,默认值为1和1.
..还有更多...
答案 2 :(得分:13)
<强> XSD:
XSD(XML模式定义)指定如何在可扩展标记语言(XML)文档中正式描述元素。
的 XML:
XML旨在描述数据。它独立于软件和硬件
它增强了以下内容
- 数据共享。
- 平台独立。
- 增加数据的可用性。
差异:
XSD基于XML编写。
XSD定义了可以出现在文档中的元素和结构,而XML则没有。
XSD确保正确解释数据,而XML则不然。
XSD文档被验证为XML,但相反的情况可能并非总是如此。
XSD在捕获错误方面比XML更好。
XSD 定义了可以在文档中使用的元素,与要编码的实际数据有关。
例如:
表示为2010年1月12日的日期可以表示1月12日或12月1日。在XSD文档中声明日期数据类型,确保它遵循XSD规定的格式。
答案 3 :(得分:5)
XML定义elements and attributes的语法,用于在well-formed文档中构建数据。
与之前的DTD一样,XSD (aka XML Schema)通过启用用户定义词汇和语法 XML 中的e X 张力> elements and attributes XML 文档中的valid。
答案 4 :(得分:2)
<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>
<强>这里:
复杂类型:表示它包含其他元素。 简单类型:表示它们不包含其他元素。
<强>类型: 串, 小数, 整数, 布尔, 日期, 时间,
简单来说,xsd是表示和验证具有特定类型的XML数据的另一种方式。借助额外的属性,我们可以执行多个操作。在xsd上执行任何任务比xml简单。
答案 5 :(得分:0)
基本上,XSD文件定义了XML文件的外观。它是架构文件,它定义了XML文件的结构。因此,它指定了可能的字段以及它们的大小。
XML文件是XSD的实例,因为它使用XSD中定义的规则。
答案 6 :(得分:0)
XML的应用范围比f.ex广泛得多。 HTML。它没有固有的或默认的“应用程序”。因此,尽管您可能不太在乎网页也受允许的内容支配,但从作者的角度来看,您可能希望精确定义XML文档可能包含和不包含的内容。
这就像设计数据库一样。
关于XML技术的事情是它们本质上是文本的。借助XSD,这意味着您拥有一个可以“插入” PHP等文本处理工具的数据结构定义框架。因此,您不仅可以操纵数据本身,而且可以非常轻松地更改和记录结构,甚至可以自动生成前端。
这样看来,XSD是数据(XML)和数据处理工具之间的“胶水”或“中间件”。