XML-схема lxml / MathML - Как мне исправить «модель содержимого не является детерминированной».ошибка? - PullRequest
2 голосов
/ 17 января 2012

Я следую документации lxml , чтобы создать класс, который проверяет данную строку XML по схеме Math ML 3.0.Вот класс:

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

Как это исправить?

1 Ответ

6 голосов
/ 19 января 2012

хм, валидаторы 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 может принимать математические выражения илидругие вещи и другие вещи - это вещи в других пространствах имен (## other) или не в пространстве имен (## local).

Я не вижу, какой из этих вариантов не является детерминированным, но вы можете попробовать упроститьнапример, удалите предложение ## local, если вам на самом деле не нужны аннотации без пространства имен.

Если у вас все получилось (или если нет), не могли бы вы пинговать меня по списку www-math@w3.orgи я исправлю схему, если она нуждается в исправлении (или, по крайней мере, запись, что lxml требует локальной модификации) (я не слежу за этим форумом, только что поднял оповещение Google на mathml: -)


Обновление

В рамках обновления для MathML3, 2-е издание Я переписал модель содержимого в версии XSD, чтобы она была принята libxml.Старая схема не была виновата, но это не помогло пользователю, поэтому казалось, что лучше ее изменить.

...