gpt4 book ai didi

xml - 如何扩展具有身份约束的元素?

转载 作者:行者123 更新时间:2023-12-05 07:59:53 26 4
gpt4 key购买 nike

在 Xml 模式中,我定义了一个复杂类型的元素 A 和一些子元素。 A 元素还要求其子元素的特定属性值具有唯一性。

想象一下(并假设 local 被声明为模式的目标命名空间的命名空间前缀):

<xs:element name="A">
<xs:complexType>
<xs:sequence>
<xs:element name="child">
<xs:complexType>
<xs:attribute name="id" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:unique name="childIdUniqueness">
<xs:selector xpath="local:child"/>
<xs:field xpath="@id"/>
</xs:unique>
</xs:element>

现在,我需要一个非常相似的元素 B,其行为与 A 完全相同,但有一个额外的 name 属性。

如何将元素 A 的定义扩展到具有附加属性的元素 B

非常相似的问题,例如thisthis指出应该扩展复杂类型而不是扩展元素。

但是,它们没有解决诸如 uniquekeykeyref 等身份约束未包含在复杂类型定义中的问题,而是直接在元素定义中(参见 Xml Schema 引用,例如 this one )。因此,这将需要我将所有身份约束(与上面的简化示例代码相反,我的实际文档具有各种身份约束)复制到每个派生元素定义中——在基于维护的更改的情况下,这是严重的错误来源限制条件。

此外,MSDN暗示对身份约束的 name 属性值的唯一性要求。虽然属性描述使用晦涩的术语身份约束集 来表示唯一性范围,keyref 的文档非常清楚地表明,这些名称可用于在其模式中明确标识身份约束,因此身份约束名称在整个模式中必须是唯一的。因此,即使复制和粘贴整 block 身份约束也行不通,我必须为每个身份约束重命名它的每次出现。

有没有处理这种情况的约定?

最佳答案

没有办法绕过它。身份约束与元素相关联;元素不是为了参与继承计划而设计的。在这一点上,实现重用定义(例如您想要的定义)的唯一方法是专有的。实现它的一种方法可能涉及自定义标记、某种描述重用的语法糖以及相关的后处理步骤以使其重新符合 XSD 规范,所有这些都是 XSD 发布管理过程的一部分(我称之为 XML模式重构,XSR)。

关于xml - 如何扩展具有身份约束的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20308094/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com