0

我无法让这个 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>
4

1 回答 1

1

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

  1. 在您的 XML 中包含以下语句:xsi:noNamespaceSchemaLocation="course_offerings.xsd"这意味着它是您的默认 XML 模式。您需要验证模式的名称并确保它存在于默认路径中..(与 XML 文件相同)。否则你最终可能会看到一个错误unable to locate schema course_offerings.xsd
  2. 您已声明 <xs:element name="course" type="xs:string"/>为字符串 .. 不应该是这种情况。在您的 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>

上面提到的样式是分层的,还有另一种方法来编写模式文件。如果您了解当前的后果并且想进一步了解,那么我会让您知道。

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

于 2013-04-19T08:53:40.297 回答