我正在尝试将来自不同来源的两个XSD文件与一个元素名称的名称冲突结合在一起。使用这些XSD文件创建XML文件时,我收到错误消息
“此处不允许使用元素标题”
其中title是导致名称冲突的元素名称。
这是第一个XSD Meldeamt.xsd
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://services.meldeamt.gov.at/people"
xmlns="http://services.meldeamt.gov.at/people"
version="2.1">
<xsd:element name="title">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="citizen"/>
<xsd:enumeration value="immigrant"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
</xsd:schema>
这是第二个XSD CalTech.xsd
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.caltech.at/hr"
xmlns="http://www.caltech.at/hr"
xmlns:registry="http://services.meldeamt.gov.at/people"
version="2.1">
<xsd:import schemaLocation="Meldeamt.xsd" namespace="http://services.meldeamt.gov.at/people" />
<xsd:element name="CalTech">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Staff"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="Staff">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Employee"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="Employee">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="firstName"/>
<xsd:element ref="name"/>
<xsd:element ref="title" />
<xsd:element ref="registry:title"/>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
<xsd:element name="title" type="xsd:string">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Ph.D." />
<xsd:enumeration value="Master" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="firstName" type="xsd:string"/>
<xsd:element name="name" type="xsd:string"/>
</xsd:schema>
以下是使用上述XSD的 Test.xml :
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<cal:CalTech xmlns:cal="http://www.caltech.at/hr"
xmlns:meldeamt="http://services.meldeamt.gov.at/people"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.caltech.at/hr CalTech.xsd
http://services.meldeamt.gov.at/people Meldeamt.xsd">
<cal:Staff>
<cal:Employee id="a471">
<cal:firstName>John</cal:firstName>
<cal:name>Connor</cal:name>
<cal:title>Ph.D.</cal:title>
<meldeamt:title>immigrant</meldeamt:title>
</cal:Employee>
</cal:Staff>
</cal:CalTech>
对于第一个标题元素cal:title
,我收到错误消息
元素cal:此处不允许使用标题
我在IntelliJ Idea中测试XML。
如果我在CalTech.xsd和Text.xml中将cal:title
的名称更改为cal:title1
,则错误消息将消失,一切正常,包括内容验证。
我不知道我在这里缺少什么。
答案 0 :(得分:2)
您实际上在设置机器以使用命名空间以避免名称冲突方面做得很好。只是一个小的声明错误修复,一切都会很好......
在CalTech.xsd中,更改
<xsd:element name="title" type="xsd:string">
到
<xsd:element name="title">
因为元素声明不能同时具有@type
属性和匿名类型子元素。
然后,您的XML文件将根据您的XSD成功验证。
顺便说一下,您应该收到的错误应该更像是Xerces提供的内容:[错误] CalTech.xsd:38:47:src-element.3:元素&#39;标题&#39;有两个 &#39;类型&#39;属性和匿名类型&#39;儿童。其中只有一个是 允许元素。