2012-01-16 27 views
2

Math ML 3.0スキーマに対して特定のXML文字列を検証するクラスを構築するには、lxml validation documentationに従っています。ここではクラスがあります:それをインスタンス化lxml/MathML XMLスキーマ - 「コンテンツモデルは決定的ではありません」を修正する方法を教えてください。エラー?

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 

私はこれをどのように修正すればよいですか?

+0

残念ながら、スキーマは〜1900行です。 well_formed_xml_string = MikeRand

+0

well_formed_xml_string = ' ' – MikeRand

答えて

6

うーん、私が試したのxsdバリデータは、それが非決定論的だったと言うしませんでした(私はlxmlのを使用していない) 関連するコードが

その注釈-XMLはMathMLのを取るか、することができます言うべき
<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> 

です他のものやその他のものは、他の名前空間(##その他)や名前空間(## local)のものではありません。

これらの選択肢のうちどれが非決定論的なのかはわかりませんが、実際に名前空間のない注釈を必要としない場合は## local句を削除してください。

[email protected]リストで私にpingしてもらえますか?修正が必要な場合はスキーマを修正します(または少なくともlxmlにローカル修正が必要であることを記録します) )(私はちょうど私がXSDバージョンでコンテンツモデルを書き換えているMathML3 2nd editionのアップデートの一環として更新


:-)のMathMLにGoogleアラートを拾い、このフォーラムに従いませんlibxmlによって受け入れられるようにします。古いスキーマは間違っていませんでしたが、それはユーザーに役立つものではないため、変更する方が良いと思われました。

+0

[email protected] ...に解決策がありました。 – MikeRand

+1

PHPでMathML(v3)XSDを解析するときに、@MikeRandと同じ問題がありました。ありがとう! – Justin

+1

@Justinはこれを見て、しばらく開いていたlibxmlのバグです。 https://bugzilla.gnome.org/show_bug.cgi?id=573483 –

関連する問題