Xml XSD:如何从外部XSD引用类型而不导入元素?
假设我们有两个使用相同名称空间定义的XML模式a.xsd和b.xsd a、 xsd包含复杂类型myType定义以及元素a。 b、 xsd只包含元素b定义 我需要在b.xsd中引用myType,以便定义元素b的一个属性 由于两个模式属于同一名称空间,我在b.xsd中使用了如下include语句:Xml XSD:如何从外部XSD引用类型而不导入元素?,xml,xsd,Xml,Xsd,假设我们有两个使用相同名称空间定义的XML模式a.xsd和b.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中,这是不可
<xs:include schemaLocation="a.xsd"></xs:include>
然后,我可以引用myType类型。
然而,问题是元素A也包含在模式B中,这是不可取的,因为模式中只会出现一个元素B
那么,有没有一种方法可以只导入或引用外部模式中定义的类型而不导入元素
谢谢,标准W3C XML模式规范没有提供仅包含或导入另一模式的选定部分的机制。这些模式组合成一个信息集。这是可能的,所以也许你可以用它做点什么 如果myType同时被元素A和元素B使用,那么它可能位于第三个xsd中。通常,被重用的基本类型被收集在它们自己的xsd中,例如types.xsd。那么a.xsd和b.xsd都应该导入/包含types.xsd,以便在不引入不需要的元素的情况下访问它们需要的类型。如果您真的决心实现这一点,您可以看到您选择的模式处理器是否提供了一个用户钩子或某种URI解析器,以允许您拦截xs:include请求并返回被引用文档的过滤版本