【问题标题】:What is the difference between XML and XSD?XML 和 XSD 有什么区别?
【发布时间】:2010-02-25 12:43:43
【问题描述】:

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

【问题讨论】:

    标签: xml xsd


    【解决方案1】:

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

    【讨论】:

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


    举个例子

    <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 文件中定义的元素必须仅使用一种数据类型定义。 [在上面的例子中,&lt;child_two&gt;出现在另一个&lt;parent&gt;节点中,不能定义除int以外的数据类型。
    3) 不能忽略元素和属性的验证,即如果元素/属性出现在XML 中,则必须在相应的XSD 中明确定义。虽然&lt;xsd:any&gt; 的使用允许它,但它有自己的规则。坚持会导致验证错误。我曾尝试过类似的方法,但肯定没有成功,here is the Q&A


    XSD 有什么可能:
    1) 您可以测试 XML 节点的正确层次结构。 [xsd 定义了哪个孩子应该在哪个父母之下,等等,遵守哪个将被视为错误,在上面的例子中,child_two 不能是 root 的直接孩子,但它是“父母”标签的孩子,而它又是一个“根”节点的子节点,有一个层次结构..]
    2)您可以定义节点值的数据类型。 [在上面的例子中 child_two 不能有任何其他数据而不是数字]
    3)您还可以定义自定义数据类型,[例如,对于节点&lt;month&gt;,可能的数据可以是 12 个月之一..因此您需要在写入所有 12 个月名称的新数据类型中定义所有 12 个月作为枚举值 .. 如果输入 XML 包含除这 12 个值之外的任何其他值,则验证将显示错误 .. ]
    4) 可以对元素的出现进行限制,使用 minOccurs 和 maxOccurs,默认值为 1 和 1。

    .. 还有更多...

    【讨论】:

    • @InfantPro'Aravind' “您无法使用另一个节点/属性的值来验证节点/属性”是什么意思。为什么有人要这样做?
    • “您不能使用另一个节点/属性的值来验证节点/属性”。这是什么意思
    • @GrowinMan,条件验证(不是父子关系) 例如:如果这是您的 xml:&lt;root&gt; &lt;A&gt;A&lt;/A&gt; &lt;B/&gt; &lt;C/&gt; &lt;/root&gt; 并且如果节点 &lt;A&gt;&lt;A&gt;B&lt;/A&gt;,则将 &lt;B&gt; 设为强制性,如果&lt;A&gt;C&lt;/A&gt; 然后将 &lt;C&gt; 设为强制。
    • 单独使用 XSD 无法实现以上要求
    【解决方案3】:

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

    【讨论】:

    • 第一句话描述了一切。
    【解决方案4】:

    简单的 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 文件?
    • @Judith 程序?你能解释一下你的问题吗?比如编辑器、语言或工具?
    【解决方案5】:

    XML 与 XSD

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

    XSD (aka XML Schema) 与之前的 DTD 一样,通过允许用户定义elements and attributesvalid XML 文档中。

    【讨论】:

      【解决方案6】:

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

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

      【讨论】:

        【解决方案7】:

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

        这就像设计一个数据库。

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-07-13
          • 1970-01-01
          • 2010-09-09
          • 1970-01-01
          • 1970-01-01
          • 2011-09-18
          • 2012-11-02
          相关资源
          最近更新 更多