【问题标题】:Schema with elements, attributes, and text带有元素、属性和文本的架构
【发布时间】:2013-04-19 06:15:26
【问题描述】:

我无法让此 XML 文件针对我的架构进行验证,根据我的 XML 编辑器,该架构没有语法错误。我试图让课程成为一个 complexType 元素,但它一直告诉我我不能。 XML 是正确的,这肯定是我的架构的问题,我只是想不通。

这是 XML:

<?xml version="1.0" encoding="utf-8"?>
<courses xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="course_offerings.xsd">

  <course id="WEB225">
    <name>Web Development II</name>
    <offered>Spring</offered>
    <pre_reqs>WEB125</pre_reqs>
  </course>

  <course id="WEB125">
    <name>Web Development I</name>
    <offered>Fall</offered>
  </course>

  <course id="WEB325">
    <name>Client-Side Scripting</name>
    <offered>Spring</offered>
    <offered>Fall</offered>
    <pre_reqs>WEB225</pre_reqs>
  </course>

</courses>

这是我的架构:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="courses">
    <xs:complexType>
      <xs:sequence>

        <xs:element name="course" type="xs:string"/>
        <xs:sequence>
          <xs:element name="name" type="xs:string"/>
          <xs:element name="offered" type="xs:string"/>
          <xs:element name="pre_reqs" type="xs:string"/>
        </xs:sequence>


      </xs:sequence>
      <xs:attribute name="id" type="xs:string"/>
    </xs:complexType>
  </xs:element>
</xs:schema>

【问题讨论】:

  • 什么错误?请提及

标签: xsd


【解决方案1】:

由于您没有提到您遇到了什么错误,所以我提供了我可以观察到的内容..

  1. 在您的 XML 中包含以下语句:xsi:noNamespaceSchemaLocation="course_offerings.xsd" 这意味着它是您的默认 XML 模式。您需要验证架构的名称并确保它存在于默认路径中..(与 XML 文件相同)。否则你可能会看到一个错误unable to locate schema course_offerings.xsd
  2. 您已将&lt;xs:element name="course" type="xs:string"/&gt; 声明为字符串.. 不应该是这种情况.. 在您的XML 中,它是一个complexType,即一个具有子元素的元素。
    1. 所有这些元素的名称、提供的、pre_reqs 都应该属于这个 complexType
    2. 属性应该在这个 complexType 的范围内。
      否则你将面临的不仅仅是一个错误,而是多个错误,因为元素课程的定义是无效的

请参阅下面的示例 XSD:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="courses">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="course">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="name" type="xs:string"/>
              <xs:element name="offered" type="xs:string"/>
              <xs:element name="pre_reqs" type="xs:string"/>
            </xs:sequence>
            <xs:attribute name="id" type="xs:string" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

上面提到的风格是分层的,有另一种方法来编写模式文件。如果你了解当前的后果,如果你想进一步了解,我会告诉你的。

现在这么多解释应该很好..

【讨论】:

  • 感谢您的帮助,我遇到了多个错误,我应该将其放在原始消息中。对不起。
  • @user2297971,请听从我的建议。如果您需要更多帮助,请告诉我,如果对您有帮助,请勾选标记以接受我的回答。
猜你喜欢
  • 2014-05-30
  • 2017-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-08
  • 1970-01-01
  • 2020-11-09
  • 1970-01-01
相关资源
最近更新 更多