找不到元素'赋值'的声明

时间:2009-09-19 23:35:09

标签: xml schema

所以我开始使用XML和Schemas,今天我遇到了这个问题,但我无法弄明白。

我收到并且错误说,

  

Ln 5 Col 2:找不到了   元素'赋值'的声明。

我相信我已经宣布了这个元素,但也许我错过了一些东西而没有。

这是我的XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<assignments
    xmlns="http://www.w3.org/2001/XMLSchema-instance"
    SchemaLocation="A3.xsd"
>
    <assignment id="a1">
        <name>Schemas</name>
        <page>110</page>
    </assignment>

    <assignment id="a2">
        <name>Namespaces</name>
        <page>258</page>
        <files>names.xml</files>
        <files>names.dtd</files>
    </assignment>

    <assignment id="a3">
        <name>RELAX NG</name>
        <page>305</page>
        <files>account.xml</files>
        <files>customers.xml</files>
        <files>finance.xsd</files>
    </assignment>

</assignments>

这是我的架构文件:

<?xml version="1.0" encoding="UTF-8"?>
<schema 
    xmlns="http://www.w3.org/2001/XMLSchema" 
    xmlns:target="http://www.levijackson.net/web340/ns" 
    targetNamespace="http://www.levijackson.net/web340/ns" elementFormDefault="qualified"
>
<element name="assignments" type="target:TypeAssignments"></element>

<complexType name="TypeAssignments">
    <sequence>
        <element name="assignment" type="target:assignmentInfo"></element>
    </sequence>
    <attribute name="id" type="string" use="required"/>
</complexType>

<complexType name="assignmentInfo">
    <sequence>
            <element name="name" type="string"></element>
            <element name="page" type="target:TypePage"></element>
            <element name="file" type="target:TypeFile" minOccurs="0" maxOccurs="unbounded"></element>
    </sequence>
</complexType>

<simpleType name="TypePage">
    <restriction base="integer">
        <minInclusive value="50" />
        <maxInclusive value="498" />
    </restriction>
</simpleType>

<simpleType name="TypeFile">
    <restriction base="string">
        <enumeration value=".xml" />
        <enumeration value=".dtd" />
        <enumeration value=".xsd" />
    </restriction>
</simpleType>

</schema>

在我还在学习的时候,请随时指出我可能犯的任何其他错误。

感谢
列维

3 个答案:

答案 0 :(得分:2)

这个问题的解决方案是我没有将我的主要元素'赋值'声明为复杂元素,我实际上并没有将它声明为任何东西。

所以从我的架构文件中取出这一行:

<element name="assignment" type="target:assignmentInfo" minOccurs="0" maxOccurs="unbounded"></element>

并将其更改为:

<element name="assignments">
    <complexType>
        <sequence>
            <element name="assignment" type="target:assignmentInfo" minOccurs="0" maxOccurs="unbounded"></element>
        </sequence>
    </complexType>
</element>

该元素已正确定义,感谢大家的帮助。

列维

答案 1 :(得分:0)

尝试以下方法。我拿出了一些关于schema元素的额外细节,但是稍微调整一下就可以使用以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">        
  <xs:element name="assignments" type="TypeAssignments" />    
  <xs:complexType name="TypeAssignments">
    <xs:sequence>
      <xs:element name="assignment" type="assignmentInfo" 
          minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>        
  </xs:complexType>

  <xs:complexType name="assignmentInfo">
    <xs:sequence>
      <xs:element name="name" type="xs:string" />
      <xs:element name="page" type="TypePage" />
      <xs:element name="files" type="xs:string"  minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="id" type="xs:string" use="required" />
  </xs:complexType>   

  <xs:simpleType name="TypePage">
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="50" />
      <xs:maxInclusive value="498" />
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="TypeFile">
    <xs:restriction base="xs:string">
      <xs:enumeration value=".xml" />
      <xs:enumeration value=".dtd" />
      <xs:enumeration value=".xsd" />
    </xs:restriction>
  </xs:simpleType>
</xs:schema>

备注

  1. ID属性已从TypeAssignments移至assignmentInfo
  2. 所有类型和元素名称都以名称空间xs
  3. 为前缀
  4. 我为赋值元素添加了minOccurs和maxOccurs属性。否则,在分配中只允许使用一个赋值元素。
  5. 我使用“/&gt;”自动关闭了您的元素而不是“”没有必要,但打字要少一点。
  6. 总而言之,我没有修改那么多,所以你有正确的想法。

答案 2 :(得分:0)

在您的实例文档中,如上所述,您在xmlns元素上定义<assignments>属性,而不在别处定义命名空间。这意味着<assignments>及其所有后代的名称空间设置为“http://www.w3.org/2001/XMLSchema-instance”。

但是,您的架构文档指定targetNamespace值“http://www.levijackson.net/web340/ns”。由于实例文档中的元素没有此命名空间,因此验证失败。

首先将实例文档更改为:

<assignments
    xmlns="http://www.levijackson.net/web340/ns"