从xsd导入的xsd包括
我有以下imp.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:///的同时添加同一行时,会收到以下警告
<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"/>