Explanation/example 正确使用 XML 架构?

Explanation/example of the proper use of an XML Schema?

我对 XML 模式感到困惑。我相信它们用于定义要用作模板的自定义元素。

假设我有以下架构:

<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <!-- definition of simple elements -->
  <xs:element name="text" type="xs:string"/>

  <!-- definition of attributes -->
  <xs:attribute name="choice_value" type="xs:int"/>

  <!-- definition of complex elements -->
  <xs:element name="choice">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="text" minOccurs="1"/>
        </xs:sequence>
        <xs:attribute ref="choice_value" use="required"/>
    </xs:complexType>
  </xs:element>

</xs:schema>

谁能提供一个详细的例子,一个完整的元素 XML 文件,说明我如何使用和导入这个模式?我可以导入或包含它,当我尝试声明我的元素时,它说找不到。 Google 结果仅显示了如何导入,但并未实际应用。

一个 XML 模式定义了一个 XML 词汇表(可以使用什么元素和属性名称)和语法(元素和属性如何组成)。

根据您的 XSD,以下 XML 文档将是有效的:

  1. <text/>
  2. <text>asdf</text>
  3. <choice choice_value="1"><text/></choice>
  4. <choice choice_value="1"><text>asdf</text></choice>

XML 文档与 XML 架构的关联通常通过根元素上的 xsi:noNamespaceSchemaLocationxsi:schemaLocation 属性来完成。下面是一个示例,说明如何向 XML 处理器提示用于验证上面的 XML 文档 #4 的 XML 模式是 try.xsd:

<choice choice_value="1"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="try.xsd">
    <text>asdf</text>
</choice>

请注意,还有其他机制可以将 XSD 与 XML 文档相关联,例如 XML Catalogs,或者特定于任何给定 [=] 的命令行或 GUI 设置首选项39=]处理器。