2

我目前正在玩一些基本的 XS Schema 东西,但是在尝试验证我的模式时遇到了一个恼人的错误。我正在使用 XMLValidation.com,我得到的错误是:

s4s-elt-must-match.1: The content of 'lecturers' must match (annotation?, (simpleType | complexType)?, (unique | key | keyref)*)). A problem was found starting at: element.

然后,我的XSD如下:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="lecturers">
    <xs:element name="lecturer">
        <xs:complexType>
            <xs:sequence>
            <xs:element name="name" type="xs:string" />
            <xs:attribute name="title" type="xs:string" />
            <xs:attribute name="first" type="xs:string" />
            <xs:attribute name="last" type="xs:string" />
        </xs:sequence>
    </xs:complexType>
    <xs:element name="teaching">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="course" type="xs:string" />
            <xs:attribute name="code" type="xs:string" />
            <xs:element name="course" type="xs:string" />
            <xs:attribute name="code" type="xs:string" />
        </xs:sequence>
    </xs:complexType>
    </xs:element>
        <xs:element name="research" type="xs:string"/>
    </xs:element>
</xs:element>
</xs:schema>

相应的 XML 文件如下所示:

<?xml version="1.0"?>
<lecturers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:noNamespaceSchemaLocation="lecturers.xsd"> 
   <lecturer>   
  <name title="Professor" first="Peter" last="Quirk" /> 
  <teaching> 
    <course code="CO3070">XML and the Web</course> 
    <course code="CO3300">Web Server Architectures</course> 
  </teaching> 
<research>The application of Web protocols to Biology</research> 
   </lecturer> 
</lecturers>

任何人都知道为什么我的代码没有验证以及我可以做些什么来解决它。提前致谢

4

3 回答 3

1

我得到了以下工作......

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="lecturers">
  <xs:complexType>
    <xs:sequence maxOccurs="unbounded">
      <xs:element name="lecturer">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="name">
              <xs:complexType>
                <xs:attribute name="title" type="xs:string" />
                <xs:attribute name="first" type="xs:string" />
                <xs:attribute name="last" type="xs:string" />
              </xs:complexType>
            </xs:element> <!-- name -->
            <xs:element name="teaching">
              <xs:complexType>
                <xs:sequence maxOccurs="unbounded">
                  <xs:element name="course">
                    <xs:complexType mixed="true">
                      <xs:attribute name="code" type="xs:string" />
                    </xs:complexType>
                  </xs:element> <!-- course -->
                </xs:sequence>
              </xs:complexType>
            </xs:element> <!-- teaching -->
            <xs:element name="research" type="xs:string"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element> <!-- lecturer -->
    </xs:sequence>
  </xs:complexType>
</xs:element> <!-- lecturers -->
</xs:schema>
于 2012-12-02T14:30:12.163 回答
1

讲师必须像其他元素一样包含 complexType :-

<xs:element name="lecturers">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="lecturer">
                <xs:complexType>
                    <xs:sequence>

...

这个错误虽然很神秘,但却是这样说的。

于 2012-12-02T15:50:09.117 回答
0

要使 xml 得到验证,此模式将执行此操作。

<xs:element name="teaching">
<xs:complexType>
    <xs:sequence>
        <xs:element name="course" maxOccurs="unbounded">
        <xs:complexType>
        <xs:simpleContent>
        <xs:extension base="xs:string">
        <xs:attribute name="code" type="xs:string" />
        </xs:extension>
        </xs:simpleContent> 
        </xs:complexType>
        </xs:element>
    </xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="research" type="xs:string"/>

于 2012-12-02T15:58:44.863 回答