我试图理解遵循 XML Schema 处理的所有(复杂)规则,但我仍然无法弄清楚!我的问题是这样的:
- 我有一个 XSD;
- 我想创建和验证基于这个 XSD 的 XML 文件,没有元素前缀;
- 我希望 jEdit、Eclipse 等编辑器能够处理基于 XSD 的自动完成功能。
但是,所有验证编辑器都会给我相同的错误消息。
这是 XSD 的精简版:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="http://www.megadix.org/standards/temp.xsd"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:jfcm="http://www.megadix.org/standards/temp.xsd"
elementFormDefault="unqualified" attributeFormDefault="unqualified">
<xsd:complexType name="MapsType">
<xsd:sequence>
<xsd:element name="map" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:attribute name="name" type="xsd:string" use="required"></xsd:attribute>
<xsd:sequence>
<xsd:element name="description" type="xsd:string" minOccurs="0" maxOccurs="1"></xsd:element>
<xsd:element name="concepts" minOccurs="0" maxOccurs="1">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="concept" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:attribute name="name" type="xsd:string" use="required"></xsd:attribute>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="maps" type="jfcm:MapsType"></xsd:element>
如果我使用前缀,文件会正确验证并自动完成:
<?xml version="1.0" encoding="UTF-8"?>
<jfcm:maps xmlns:jfcm="http://www.megadix.org/standards/temp.xsd">
<map name="Test Map">
<concepts>
<concept name="c1" />
<concept name="c2" />
<concept name="c3" />
</concepts>
</map>
但如果我删除它:
<?xml version="1.0" encoding="UTF-8"?>
<maps xmlns:jfcm="http://www.megadix.org/standards/temp.xsd">
<map name="Test Map">
<concepts>
<concept name="c1" />
<concept name="c2" />
<concept name="c3" />
</concepts>
</map>
我收到此错误消息:
发现以元素“地图”开头的无效内容。需要“{map}”之一。
有什么建议么?