我需要通过xsd定义交换格式。我创建了一个示例xml文件,因为我想要它并且想要测试它是否符合我创建的本地xsd所以我试图通过IntelliJIDEA验证它并得到以下错误。请指出我做错了什么。
<?xml version="1.0" encoding="UTF-8"?>
<dictionaryResponse
xmlns="http://dictionaries.persistence.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://dictionaries.persistence.com dictionaries.xsd">
<entry>
<dictionaryCode>2</dictionaryCode>
<id>1</id>
<code>C</code>
</entry>
<entry>
<dictionaryCode>2</dictionaryCode>
<id>2</id>
<code>V</code>
</entry>
<entry>
<dictionaryCode>2</dictionaryCode>
<id>3</id>
<code>R2</code>
</entry>
<entry>
<dictionaryCode>2</dictionaryCode>
<id>4</id>
<code>TM</code>
</entry>
<entry>
<dictionaryCode>2</dictionaryCode>
<id>5</id>
<code>SN</code>
</entry>
<entry>
<dictionaryCode>2</dictionaryCode>
<id>6</id>
<code>SA</code>
</entry>
</dictionaryResponse>
dictionaries.xsd
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" targetNamespace="http://dictionaries.persistence.com" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="dictionaryRequest">
<xs:sequence>
<xs:element name="dictionaryCode" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="dictionaryResponse">
<xs:sequence>
<xs:element name="entry" type="entry" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="entry">
<xs:sequence>
<xs:element name="dictionaryCode" type="xs:string"/>
<xs:element name="id" type="xs:string"/>
<xs:element name="code" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
错误:
错误:(12,74)src-resolve.4.1:解析组件&#39;条目&#39;时出错。检测到&#39;条目&#39;没有命名空间,但没有目标命名空间的组件不能从模式文档&file:///opt/idea-IC-141.1532.4/dictionaries.xsd'中引用。如果进入&#39;意图具有命名空间,可能需要提供前缀。如果打算进入&#39;没有命名空间,然后导入&#39;没有&#34;命名空间&#34;属性应添加到&#39; file:///opt/idea-IC-141.1532.4/dictionaries.xsd'。
错误:(5,83)cvc-elt.1:找不到元素的声明&#39; dictionaryResponse&#39;。
条目在相同的xsd中定义。我无法理解问题的根源是什么
感谢您的帮助。
答案 0 :(得分:2)
您的XML文档是下面架构的有效实例。我改变了以下内容:
xs:element
添加了dictionaryResponse
声明。声明该名称的类型是不够的,您还必须在元素声明中使用这种类型。elementFormDefault="qualified"
,因为目标命名空间应该应用于文档实例中的所有元素。没有它,您的架构需要 no 名称空间中的元素。http://dictionaries.persistence.com
架构文档的默认命名空间entry
元素的类型更改为entryType
:不要对元素名称和类型名称使用相同的名称,这可能会导致很多混淆。XML架构
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" targetNamespace="http://dictionaries.persistence.com" xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" xmlns="http://dictionaries.persistence.com">
<xs:element name="dictionaryResponse" type="dictionaryResponseType"/>
<xs:complexType name="dictionaryRequest">
<xs:sequence>
<xs:element name="dictionaryCode" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="dictionaryResponseType">
<xs:sequence>
<xs:element name="entry" type="entryType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="entryType">
<xs:sequence>
<xs:element name="dictionaryCode" type="xs:string"/>
<xs:element name="id" type="xs:string"/>
<xs:element name="code" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
示例文档中没有dictionaryRequest
元素 - 您确定需要它的类型定义吗?