XSD 导入元素名称冲突

XSD import with element name clash

我正在尝试将来自不同来源的两个 XSD 文件放在一起,其中一个元素名称存在名称冲突。使用这些 XSD 文件创建 XML 文件时,我收到错误消息

"Element title is not allowed here"

其中 title 是导致名称冲突的元素名称。

这是第一个XSDMeldeamt.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>

这里是第二个XSDCalTech.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>

这里是 Test.xml 使用上面的 XSDs:

<?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,我收到错误消息

Element cal:title is not allowed here

我正在 IntelliJ Idea 中测试 XML。 如果我在 CalTech.xsd 和 Text.xml 中将 cal:title 的名称更改为 cal:title1,则错误消息消失,并且一切正常,包括内容验证。

我不知道我在这里错过了什么。

您实际上在设置机器以使用命名空间以避免名称冲突方面做得很好。只需修复一个小的声明错误,一切都会好起来的...

在CalTech.xsd中,更改

<xsd:element name="title" type="xsd:string">

<xsd:element name="title">

因为元素声明不能同时具有 @type 属性和匿名类型子元素。

然后,您的 XML 文件将针对您的 XSD 成功验证。

顺便说一句,您应该收到的错误应该更符合 Xerces 提供的内容:

[Error] CalTech.xsd:38:47: src-element.3: Element 'title' has both a 'type' attribute and a 'anonymous type' child. Only one of these is allowed for an element.