【问题标题】:XSD: how to reference types from external XSD without importing elements?XSD:如何在不导入元素的情况下从外部 XSD 引用类型?
【发布时间】:2025-12-31 03:20:16
【问题描述】:

假设我们有两个 XML 模式 a.xsdb.xsd 使用相同的命名空间定义。

a.xsd 包含复杂类型“myType”定义以及元素“A”。
b .xsd 仅包含元素 B 定义。

我需要在 b.xsd 中引用 myType 以定义元素 B.. 的属性之一。

由于两个模式属于同一个命名空间,我在 b.xsd 中使用了这样的 include 语句:

<xs:include schemaLocation="a.xsd"></xs:include>

然后,我可以引用类型 myType。
然而,问题是元素 A 也包含在模式 B 中,这是不可取的,因为预计模式中只会出现一个元素 B。

那么,有没有办法只导入或引用外部架构中定义的类型而不导入元素?

谢谢,

【问题讨论】:

    标签: xml xsd


    【解决方案1】:

    如果您真的下定决心要实现这一点,您可以查看您选择的架构处理器是否提供了用户挂钩(某种 URI 解析器)以允许您拦截 xs:include 请求并返回引用文档的过滤版本.

    【讨论】:

      【解决方案2】:

      标准的 W3C XML Schema 规范没有提供仅包含或导入另一个模式的选定部分的机制。这些模式被组合成一个单一的信息集。可以redefine imported definitions,所以也许你可以用它做点什么。

      【讨论】:

        【解决方案3】:

        如果元素 A 和元素 B 都使用 myType,它可能应该在第三个 xsd 中。通常被重用的基本类型收集在它们自己的 xsd 中,例如 types.xsd。然后 a.xsd 和 b.xsd 都应该导入/包含 types.xsd 以访问他们需要的类型,而不会引入不需要的元素。

        【讨论】:

          最近更新 更多