gpt4 book ai didi

python - lxml/MathML XML 架构 - 如何修复 "content model is not determinist."错误?

转载 作者:行者123 更新时间:2023-11-28 21:28:10 31 4
gpt4 key购买 nike

我正在关注 lxml validation documentation构建一个类,根据 Math ML 3.0 模式验证给定的 XML 字符串。这是类(class):

class XMLSchema(object):

def __init__(self, path_to_xsd_file):
with open(path_to_xsd_file) as f:
xmlschema_doc = etree.parse(f)
self.xmlschema = etree.XMLSchema(xmlschema_doc)

def validate(self, well_formed_xml_string):
"""Validates a well-formed XML string against an XML schema.

Returns True if xml_string is valid, False if not.

"""
xml = etree.parse(StringIO(well_formed_xml_string))
return self.xmlschema.validate(xml)

实例化它会产生以下内容:

>>> x = XMLSchema('mathml3.xsd')
Traceback (most recent call last):
...
lxml.etree.XMLSchemaParseError: complex type
'annotation-xml.model': The content model is not determinist., line 42

我该如何解决这个问题?

最佳答案

嗯,我试过的 xsd 验证器并没有说它是不确定的(但我没有使用 lxml)相关代码是

  <xs:complexType name="annotation-xml.model">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="m:MathExpression"/>
<xs:group ref="m:anyElement"/>
</xs:choice>
</xs:complexType>
<xs:group name="anyElement">
<xs:choice>
<xs:any namespace="##other" processContents="skip"/>
<xs:any namespace="##local" processContents="skip"/>
</xs:choice>
</xs:group>

应该说 annotation-xml 可以采用 mathml 或其他东西,而其他东西是其他 namespace (##other) 中的东西或不在 namespace (##local) 中的东西。

我看不出哪些选择是不确定的,但您可以尝试简化事情,例如,如果您实际上不需要未命名空间的注释,请删除 ##local 子句。

如果你让它工作(或者如果不工作),你可以在 www-math@w3.org 列表上 ping 我,如果它需要修复我会修复模式(或者至少记录 lxml 需要本地修改) (我不关注这个论坛,只是在 mathml 上找到了一个谷歌警报:-)


更新

作为 MathML3 2nd edition 更新的一部分我已经重写了 XSD 版本中的内容模型,以便它被 libxml 接受。旧架构没有问题,但这对用户没有帮助,因此更改它似乎更好。

关于python - lxml/MathML XML 架构 - 如何修复 "content model is not determinist."错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8886958/

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