gpt4 book ai didi

python - 元素顺序随机且 maxOccurs > 1

转载 作者:行者123 更新时间:2023-12-01 15:50:42 24 4
gpt4 key购买 nike

我需要创建一个 XSD 1.0 来验证 XML 文件。

验证将使用 python 中的 lxml.etree,该工具仅支持 XML Schema 1.0 ( lxml with schema 1.1 )

我需要使用的结构是这样的类型:

    item
| owners*
| config+
| | config_id
| | tests*
| | picked?
| | capability*
| | | name
| | | value

使用的符号是:

  • *该元素可以出现零次或多次。
  • +该元素可以出现一次或多次。
  • ?该元素是可选的。

config 标签中的元素可以是任意顺序,这意味着我不能使用<sequence>指标。 <all>指示器给我随机顺序,但在本例中为 maxOccurs是 1。<choice>指标与 maxOccurs="unbounded"会给我随机顺序和元素的倍数,但元素没有下限。

我的 XSD 文件看起来像这样:

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!--Schema version: 1.0, date: 29-02-2016-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<!-- definition of complex types -->
<xs:complexType name="capability_type">
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="value" type="xs:string" />
</xs:sequence>
</xs:complexType>

<xs:complexType name="config_type">
<xs:all>
<xs:element name="config_id" type="xs:string" />
<xs:element name="tests" type="xs:string" minOccurs="0"
maxOccurs="unbounded" />
<xs:element name="picked" type="xs:string" minOccurs="0" />
<xs:element name="capability" type="capability_type"
minOccurs="0" maxOccurs="unbounded" />
</xs:all>
</xs:complexType>

<xs:complexType name="item_type">
<xs:sequence>
<xs:element name="owners" type="xs:string" minOccurs="0"
maxOccurs="unbounded" />
<xs:element name="config" type="config_type" minOccurs="1"
maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>

<!-- definition of schema -->
<xs:element name="item" type="item_type" />

</xs:schema>

使用这个模式我收到错误:

element element: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element': Invalid value for maxOccurs (must be 0 or 1).

我的问题有什么替代方案吗?

最佳答案

是的,还有其他选择:

  1. 完全放弃随机顺序要求。它往往比它的值(value)更麻烦。
  2. 通过将 config_idpicked 迁移到 xs:all 之外并迁移 maxOccurs="unbounded"来部分放弃随机顺序要求"xs:all 的子级到 xs:all 本身。
  3. 保持随机顺序要求,将 maxOccurs="unbounded" 迁移到 xs:all,并使用 XSD 1.1 断言强制执行其他出现约束。

关于python - 元素顺序随机且 maxOccurs > 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35747988/

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