一起使用 targetNamespace 和 xmlns 是错误吗?

Is the using targetNamespace and xmlns together is an error?

我用以下 header 创建了一个 XSD。

<?xml version="1.0" encoding="utf-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns="https://github.com/geryxyz/binary-schema"
    targetNamespace="https://github.com/geryxyz/binary-schema"
>
    <xsd:complexType name="formatType">
        <xsd:annotation>
            <xsd:documentation xml:lang="en">
                The root element for the binary file format specification.
            </xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="type" type="typeType" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>

...

我还根据上面的XSD创建了一个示例XML。

<?xml version="1.0" encoding="UTF-8" ?>
<format xmlns="https://github.com/geryxyz/binary-schema"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="https://github.com/geryxyz/binary-schema binary-schema.xsd">
    <type name="sdfsd">
        <chunk length="23"/>
    </type>
</format>

我的调查表明 XSD 中 xmlnstargetNamespace 的使用有些多余。

我使用 PyCharm 作为 IDE,它报告示例 XML 文件中的错误。

如果我从 XSD 中删除 xmlns 声明,错误就会消失。我想了解所发生事情背后的基本概念。它是 PyCharm 中的错误,还是 XSD 不良做法?

不,同时使用 targetNamespacexmlns 本身并不是错误。

而且,不,从 XSD 中删除默认命名空间声明 (xmlns) 将无法解决错误 1 – 无需进一步调整,它只会在 XSD 中产生错误,因为将不再找到引用的类型声明。

解决问题的最简单方法是添加

elementFormDefault="qualified"

到 XSD 的 xsd:schema 元素。

另见

  • What does elementFormDefault do in XSD?

1 如果错误似乎从此操作中消失而没有引发另一个错误,则可能是配置问题、某种用户错误或 problem/limitation PyCharm.