所以我开始使用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>
在我还在学习的时候,请随时指出我可能犯的任何其他错误。
感谢
列维
答案 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>
备注:
TypeAssignments
移至assignmentInfo
。xs
总而言之,我没有修改那么多,所以你有正确的想法。
答案 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"