如何允许 XML 元素通过 XSD 出现在任何地方?

用户826955

我有以下 XML:

<root>
  <someNode>
    <someChild attr="val" />
  </someNode>

  <otherNode>
    <otherChild>
      <otherSubChild />
    </otherChild>
  </otherNode>
</root>

一个有效的 XML Schema 将非常容易。现在的问题是,我的程序必须支持在解析文件时评估的特殊元素,并导致元素的条件替换。

例子:

    <root>
      <someNode>
        <if environment="DEV">
          <someChild attr="val" />
        </if>
        <if environment="PROD">
          <someChild attr="otherVal" />
        </if>
      </someNode>

      <otherNode>
        <otherChild>
          <if environment="DEV">
            <otherSubChild />
          </if>
        </otherChild>
      </otherNode>
    </root>

我想你应该已经明白了。问题是,if允许元素出现在 XML 中的任何地方,但同时允许包含允许放入元素的任何元素。

我将如何以一种好的方式定义它?目前,我的 XML 模式中有大约 90 种类型/元素,手动编辑每个类型/元素以允许if允许正确子元素的元素真的很麻烦

是否可以制作一个允许上述if元素的架构

休斯

因此,您已经指定了内容模型的层次结构,具体说明了哪些元素可以出现在哪些其他元素中,以多少数量以及可能以什么顺序出现。现在您要添加,顺便说一句,一个if元素可以在任何地方包装任何现有元素?

你不能在 XSD 中做到这一点。如果不修改这些特定指令,或者没有预先为这种可能性做出规定,您就无法以这种方式在全局范围内反击所有特定约束。(例如,如果您定义了一个元素替换组,它可能会出现在整个文档的多个位置,您可以轻松地向该组添加一个新成员。)

有一种说法可以说任何元素都可以出现在内容模型 ( xs:any)中的给定位置,但没有办法说给定元素可以出现在所有内容模型中的任何地方。在 XSD 1.1 中,有一种新机制允​​许在内容模型中开放内容,但这也允许前瞻性规定,而不是追溯全局调整。

一个建议可能是在 XML 的有如果和无如果形式之间编写一个简单的 XSLT 转换,并分别验证这些文档。

另一种方法是将您的条件表示为将出现在任何元素上的属性,而不是可以包装任何其他元素的元素。这仍然需要对 XSD 进行更新,但在保留现有内容模型的同时进行更新会更容易。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

允许通过XSD多次出现无序XML元素

来自分类Dev

通过XSD仅允许XML元素中的固定文本吗?

来自分类Dev

XML XSD-允许任意的大子元素

来自分类Dev

允许任何内容的XML模式(xsd:any)

来自分类Dev

如何通过在 app.module 中指定它来在任何地方使用自定义指令?

来自分类Dev

如何通过以下XSD创建XML文件

来自分类Dev

如何在任何地方运行Appimage?

来自分类Dev

XML .xsd无效元素

来自分类Dev

XML .xsd无效元素

来自分类Dev

通过XSD验证XML

来自分类Dev

Rails:Flash消息没有出现在任何地方

来自分类Dev

如何在XSD中将子XML元素与文本混合

来自分类Dev

如何在XML / XSD中获取属性的元素名称

来自分类Dev

为什么Xcode允许我在任何地方声明C变量?

来自分类Dev

如果序列xsd中存在任何一个元素,则验证xml

来自分类Dev

如何允许XSD中的无序元素交织?

来自分类Dev

在任何地方单击时都隐藏元素,而无需检查每个DOM单击

来自分类Dev

通过 odbc 文本格式变音 (öäü) 在任何地方使用 c# sql

来自分类Dev

XSD中的xs:choice是否在结果XML中允许多个元素?

来自分类Dev

如何编写XML模式以允许/以任何顺序出现元素一次?

来自分类Dev

如何检测到USB,但未在任何地方显示?

来自分类Dev

如何使CMake在任何地方自动添加MagickWand库链接

来自分类常见问题

SwiftUI:如何使NavigationLink不在任何地方并停留在当前视图上

来自分类Dev

如何签名可在任何地方运行的exe或msix安装程序

来自分类Dev

如何在Nuxt中定义全局变量以在任何地方访问

来自分类Dev

SwiftUI:如何使NavigationLink不在任何地方并停留在当前视图上

来自分类Dev

如何在任何地方从另一个类调用函数

来自分类Dev

如何检测到USB,但未在任何地方显示?

来自分类Dev

如何强制MS Word 2010在任何地方拆分单词

Related 相关文章

  1. 1

    允许通过XSD多次出现无序XML元素

  2. 2

    通过XSD仅允许XML元素中的固定文本吗?

  3. 3

    XML XSD-允许任意的大子元素

  4. 4

    允许任何内容的XML模式(xsd:any)

  5. 5

    如何通过在 app.module 中指定它来在任何地方使用自定义指令?

  6. 6

    如何通过以下XSD创建XML文件

  7. 7

    如何在任何地方运行Appimage?

  8. 8

    XML .xsd无效元素

  9. 9

    XML .xsd无效元素

  10. 10

    通过XSD验证XML

  11. 11

    Rails:Flash消息没有出现在任何地方

  12. 12

    如何在XSD中将子XML元素与文本混合

  13. 13

    如何在XML / XSD中获取属性的元素名称

  14. 14

    为什么Xcode允许我在任何地方声明C变量?

  15. 15

    如果序列xsd中存在任何一个元素,则验证xml

  16. 16

    如何允许XSD中的无序元素交织?

  17. 17

    在任何地方单击时都隐藏元素,而无需检查每个DOM单击

  18. 18

    通过 odbc 文本格式变音 (öäü) 在任何地方使用 c# sql

  19. 19

    XSD中的xs:choice是否在结果XML中允许多个元素?

  20. 20

    如何编写XML模式以允许/以任何顺序出现元素一次?

  21. 21

    如何检测到USB,但未在任何地方显示?

  22. 22

    如何使CMake在任何地方自动添加MagickWand库链接

  23. 23

    SwiftUI:如何使NavigationLink不在任何地方并停留在当前视图上

  24. 24

    如何签名可在任何地方运行的exe或msix安装程序

  25. 25

    如何在Nuxt中定义全局变量以在任何地方访问

  26. 26

    SwiftUI:如何使NavigationLink不在任何地方并停留在当前视图上

  27. 27

    如何在任何地方从另一个类调用函数

  28. 28

    如何检测到USB,但未在任何地方显示?

  29. 29

    如何强制MS Word 2010在任何地方拆分单词

热门标签

归档