具有元素,属性和文本的模式

时间:2013-04-19 06:15:27

标签: xsd

我无法获取此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>

1 个答案:

答案 0 :(得分: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的范围内。
      否则,由于元素课程的定义无效,您不仅会遇到一个而是多个错误
  3. 参考以下示例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>
    

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

    现在这个解释应该是好的..