ChatGPT解决这个技术问题 Extra ChatGPT

XML 和 XSD 有什么区别?

可扩展标记语言 (XML) 和 XML 模式 (XSD) 有什么区别?


P
Pedro Gaspar

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


我很清楚 - 如果第 3 方向我发送了一个 .XSD 文档,其中包括: - 这只是字段的描述不是吗。向他们询问实际的示例请求是否合理,该请求将是带有 等的原始 XML 等等。
当然,你可以问他们。您还可以使用一些可以为您执行此操作的在线工具,例如这个工具 - xsd2xml。只需粘贴 xsd,它就会根据它生成一个示例 xml 文档。
C
Community

举个例子

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

.. 还有很多 ...


@InfantPro'Aravind'“您无法使用另一个节点/属性的值来验证节点/属性”是什么意思。为什么有人想这样做?
“您无法使用另一个节点/属性的值来验证节点/属性”。这是什么意思
@GrowinMan,条件验证(不是父子关系)例如:如果这是您的 xml:<root> <A>A</A> <B/> <C/> </root> 并且如果节点 <A><A>B</A>,则使 <B> 强制,如果 <A>C</A> 则使 <C>强制的。
仅靠 XSD 无法实现上述要求
S
Skull

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 规定的格式。


第一个陈述描述了一切。
s
shubham1js

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


你好!我使用什么程序来创建 XSD 文件?
@朱迪思程序?你能解释一下你的问题吗?像编辑器或语言或工具?
C
Community

XML 与 XSD

XML 定义了 elements and attributes语法,用于在 well-formed 文档中构建数据。

XSD (aka XML Schema) 与之前的 DTD 一样,通过使用户能够定义 {2 } 在 valid XML 文档中。


S
SelMez

基本上,XSD 文件定义了 XML 文件的外观。它是一个 Schema 文件,它定义了 XML 文件的结构。所以它指定了可能的字段是什么以及它们将是什么大小。

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


A
Ate Somebits

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

这就像设计一个数据库。

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

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