当前位置: 首页 > 知识库问答 >
问题:

从xsd导入包括

郭志泽
2023-03-14
<xsd:schema targetNamespace="http://imported"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="Imported" type="xsd:string"/>
</xsd:schema>
<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>

问题:“main.xsd”是一个有效的xml模式文档吗?

当使用xmllint解析器(或从pythonlxml库(该库反过来使用xmllint)进行验证时,我会得到以下错误:

元素“{http://www.w3.org/2001/xmlschema}Element”,属性“ref”:不允许从该架构引用命名空间“http://imported”中的组件,因为没有由import语句指示。WXS架构main.xsd编译失败

编辑:我对xmllint进行了一点试验,当我添加一行时

<xsd:import namespace="http://imported" schemaLocation="file:///C:/.../imp.xsd"/>

在“main.xsd”中,xmllint接受该模式。但是,当我添加相同的行而省略file://时,我会得到以下警告:

元素“{http://www.w3.org/2001/xmlschema}import”:跳过名称空间“http://imported”位于“c:/.../imported...xsd”的架构导入,因为此名称空间已经与位于“file:///v:/.../imported...xsd”的架构一起导入。

共有1个答案

慕乐语
2023-03-14

请参阅xmlschema-dev@w3.org邮件列表中的这个线程。在他的回答中,Henry S.Thompson引用了以下部分规范:

QName·解析为架构组件[...]QName·的·namespace名称·与下列之一相同:

[...]

    null
 类似资料:
  • 我正试图将xsd导入到另一个xsd。我看到一些问题需要解决。我无法理解网上提供的解决方案。下面是我的XSD。 我有header.xsd。这对于所有其他XSD都是常见的。 异常说明:不是有效的:src-resolve.4.2:错误解析组件“xs:reqheader”。检测到'xs:reqheader'位于命名空间'http://www.w3.org/2001/xmlschema'中,但来自此命名空间

  • 问题内容: jaxb插件有很大的问题。我有一个项目A,其中有src / main / resources / xsd / common.xsd文件。在这个项目中,我使用cxf-xjc-plugin生成Java类。我在src / main / resources / META- INF下也有我的Episod文件,名为sun-jaxb.episode 接下来,我有项目B,该项目对项目A具有Maven依

  • 问题内容: 我有几个重复使用相同实体的XSD。例如,无论是对的XSD 和都有一个在他们的标签来描述产品的问题。因此,我创建了一个文件来定义标记,并同时定义了 两个标记,并使用ProductQuoteRequest.xsdProduct.xsd`。 我想使用Castor从这些XSD生成Java类,并且让他们两个都使用相同的类来表示XSD,这样我就可以重用相同的逻辑将它们映射到模型的类。 Castor

  • 我有一些XSD,其中一些共享公共定义。我将这些通用定义分离到一个单独的XSD中。到目前为止,我通过跨项目的相对路径导入了这个。Thsi之所以起作用,是因为所有项目都在dame SCM存储库中。 现在,我将这些项目分离到单独的SCM存储库中,并且需要更改对的访问,而该访问已经存在于它自己的项目中()。 我读到的是:http://www.sagehill.net/docbookxsl/writecat

  • 使用: 所有类都在中生成,在中没有类。没有-p开关,所有xsd都是在它们自己的默认包中生成的。但无法告诉wsimport为每个XSD使用特定的包。现在我使用以下绑定文件,这可能是不正确的,但wsimport对此没有抱怨: 在包org.broker.wsi.b_2和org.broker.wsi.t_1中,不生成任何文件。 欢迎提出建议。