从xsd导入的xsd包括

从xsd导入的xsd包括,xsd,lxml,libxml2,xmllint,xsd-1.1,Xsd,Lxml,Libxml2,Xmllint,Xsd 1.1,我有以下imp.xsd: <xsd:schema targetNamespace="http://imported" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="Imported" type="xsd:string"/> </xsd:schema> 在main.xsd中,xmllint接受该模式。但是,当我在省略file:///的同时添加同一行时,会收到以下警告

我有以下imp.xsd:

<xsd:schema targetNamespace="http://imported"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="Imported" type="xsd:string"/>
</xsd:schema>
在main.xsd中,xmllint接受该模式。但是,当我在省略file:///的同时添加同一行时,会收到以下警告:

元素“{}导入”:跳过的导入 位于命名空间的“C:/…/imported.xsd”处的架构 ,因为此命名空间已与一起导入 架构位于'file:///V:/.../imported.xsd"

因此,我推断原始的main.xsd是有效的,这是xmllint中的一个bug。

请参见xmlschema-dev@w3.org邮件列表。亨利·S·汤普森在回答中引用了以下部分:

对于·QName·要解析为架构组件[…]的 ·.QName.的命名空间名称与以下名称之一相同:

[……]

某些属性的名称空间[属性]的实际值 元素中包含的元素信息项 该模式文档的信息项[已添加重点]。 因此,间接进口不应该起作用

<xsd:schema targetNamespace="http://main"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:import namespace="http://imported" schemaLocation="file:///C:/.../imp.xsd"/>
    <xsd:element name="Included" type="xsd:string"/>
</xsd:schema>
<xsd:schema targetNamespace="http://main"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:include schemaLocation="file:///C:/.../incl.xsd"/>
    <xsd:complexType name="dummy">
        <xsd:sequence xmlns:impt="http://imported" xmlns:incl="http://main">
            <xsd:element ref="incl:Included"/>
            <xsd:element ref="impt:Imported"/>
        </xsd:sequence>
    </xsd:complexType>
</xsd:schema>
<xsd:import namespace="http://imported" schemaLocation="file:///C:/.../imp.xsd"/>