XML和XSD有什么区别?


Answers:


145

实际上,XSD是XML本身。其目的是验证另一个XML文档的结构。XSD对于任何XML都不是强制性的,但是它确保XML可以用于某些特定目的。XML仅包含适当格式和结构的数据。


我很清楚-如果第三方向我发送了一个.XSD文档,其中包含以下内容:<xs:element name =“ QuoteRequestID” type =“ xs:unsignedLong” minOccurs =“ 0” />-这仅仅是是不是对字段的描述。问他们一个实际的示例请求是否合理,这将是带有<QuoteResultID>等的原始XML。–
James Wilson

3
当然,您可以问他们。您还可以使用一些可以为您完成此任务的在线工具,例如-xsd2xml。只需粘贴xsd,它将基于它生成一个示例xml文档。
anthares

@anthares,我尝试使用以下链接:<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="QuoteRequestID" type="xs:unsignedLong" minOccurs="0" /> </xs:schema> 但最终收到错误: Error!!! The 'minOccurs' attribute cannot be present.
totoinfinity

为什么会有问题呢?
heretoinfinity

111


举个例子

<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>允许它,但是它有自己的规则。遵守会导致验证错误。我曾尝试过类似的方法,但肯定没有成功,这是问答环节


XSD可能实现的功能:
1)您可以测试XML节点的正确层次结构。[xsd定义哪个子项应该属于哪个父项,等等,并遵循将被视为错误的方式,在上面的示例中,child_two不能是root的直接子项,而是“ parent”标记的子项,这反过来又“根”节点的子节点,有一个层次结构。]
2)您可以定义节点值的数据类型。[在上面的示例中child_two不能有数字以外的任何其他数据]
3)您还可以定义自定义data_types,例如,对于node <month>,可能的数据可以是12个月中的一个。.因此您需要定义所有12个月在新的数据类型中,将所有12个月的名称都写为枚举值..
4)您可以使用minOccurs和maxOccurs来限制元素的出现,默认值为1和1。

.. 还有很多 ...


1
@ InfantPro'Aravind'的意思是“您不能使用另一个节点/属性的值来验证节点/属性”。为什么有人要这样做?
极客2014年


“您不能使用另一个节点/属性的值来验证节点/属性”。这是什么意思
GrowinMan 2014年

@GrowinMan,条件验证(非父子关系)例如:如果这是您的xml:<root> <A>A</A> <B/> <C/> </root>如果Node <A><A>B</A>,则<B>强制执行,如果必须,<A>C</A><C>强制执行。
InfantPro'Aravind'2014年


15

XSD:
XSD(XML架构定义)指定如何正式描述可扩展标记语言(XML)文档中的元素。
Xml:
XML旨在描述数据。它独立于软件和硬件。
它增强了以下功能。
-数据共享。
-独立于平台。
-增加数据的可用性。

差异:

  1. XSD是基于XML编写的。

  2. XSD定义了可以出现在文档中的元素和结构,而XML则没有。

  3. XSD确保正确解释数据,而XML不正确。

  4. XSD文档已被验证为XML,但并非总是如此。

  5. XSD比XML更能捕获错误。

XSD 定义了可在文档中使用的元素,这些元素与将使用其编码的实际数据有关。
例如:
表示为1/12/2010的日期可以表示1月12日或12月1日。在XSD文档中声明日期数据类型,确保其遵循XSD规定的格式。


第一条陈述描述了一切。
Ojonugwa Jude Ochalifu


6

简单的XML示例:

<school>
  <firstname>John</firstname>
  <lastname>Smith</lastname>
</school>

XML的XSD(解释):

<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简单。


嗨!我使用什么程序来创建XSD文件?
朱迪思

@Judith程序?你能解释你的问题吗?例如编辑器,语言或工具?
shubham1js

1

基本上,XSD文件定义XML文件的外观。它是 Schema文件,用于定义XML文件的结构。因此,它指定了可能的字段以及字段的大小。

XML文件是XSD 的实例,因为它使用XSD中定义的规则。


0

XML比f.ex具有更广泛的应用。HTML。它没有固有的或默认的“应用程序”。因此,尽管您可能不太在乎网页也受允许的内容支配,但从作者的角度来看,您可能希望精确定义XML文档可能包含和不包含的内容。

就像设计数据库一样。

关于XML技术的事情是它们本质上是文本的。使用XSD,这意味着您拥有一个数据结构定义框架,可以将其“插入”到PHP之类的文本处理工具中。因此,您不仅可以操纵数据本身,而且可以非常轻松地更改和记录结构,甚至自动生成前端。

这样看来,XSD是数据(XML)和数据处理工具之间的“胶水”或“中间件”。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.