2017-11-15 5 views
1

ISOSTS SVG画像タグをサポートするXSD方式を拡張しようとしています。 XSD scheme for SVGが見つかり、ISOSTS.xsdの近くに置いてあります。 は今、私はISOSTS.xsdを拡張しよう:SVGをサポートするためにXSDスキームを拡張する方法は?

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema 
     xmlns:xs="http://www.w3.org/2001/XMLSchema" 
     xmlns:mml="http://www.w3.org/1998/Math/MathML" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:tbx="urn:iso:std:iso:30042:ed-1" 
     xmlns:xlink="http://www.w3.org/1999/xlink" 

<!-- my line --> 
     xmlns:svg="http://www.w3.org/2000/svg" 

     elementFormDefault="qualified"> 
     <xs:import namespace="http://www.w3.org/1998/Math/MathML" 
       schemaLocation="ncbi-mathml2/mathml2.xsd"/> 
     <xs:import namespace="http://www.w3.org/1999/xlink" 
       schemaLocation="xlink.xsd"/> 
     <!-- XSD import of namespace http://www.w3.org/2001/XMLSchema-instance suppressed (not necessary) --> 
     <xs:import namespace="http://www.w3.org/XML/1998/namespace" 
       schemaLocation="xml.xsd"/> 
     <xs:import namespace="urn:iso:std:iso:30042:ed-1" 
       schemaLocation="tbx.xsd"/> 

<!-- my line --> 
     <xs:import namespace="http://www.w3.org/2000/svg" 
       schemaLocation="SVG.xsd"/> 

.... 
<xs:element name="p"> 
    <xs:complexType mixed="true"> 
    <xs:choice minOccurs="0" maxOccurs="unbounded"> 
<!-- my line --> <xs:element ref="svg:svg"/> 
        <xs:element ref="email"/> 
.... 

しかし、負荷方式にしようとしたとき、私はエラーを持っている:

from lxml.etree import parse, XMLSchema 

    schema_file = open(self._schema_filename) 

    schema_doc = parse(schema_file) 
    schema_file.close() 

    self._xmlschema = XMLSchema(schema_doc) # Error 

エラーメッセージ:

File "src/lxml/xmlschema.pxi", line 87, in lxml.etree.XMLSchema.init (src/lxml/lxml.etree.c:197819)

lxml.etree.XMLSchemaParseError: Element '{ http://www.w3.org/2001/XMLSchema }element', attribute 'ref': References from this schema to components in the namespace ' http://www.w3.org/2000/svg ' are not allowed, since not indicated by an import statement., line 4664

間違っていますか?

答えて

1

メッセージがわかりやすく表示されていますが、わからない部分があります。あなたのスキーマドキュメントは、さまざまな名前空間(mathml、xlink、xmlなど)のスキーマコンポーネントをインポートしますが、SVGのスキーマをインポートしようとせず、エラーメッセージが表示します。

+0

実は、OPはありませんSVGスキーマをインポートします。それはXSDの抽出物に埋もれていますが、そこにあります。私はそれを少し良くするために編集しました。 –

1

SVG名前空間の名前空間バインディングを宣言し、SVG名前空間をインポートし、svg:svg要素を参照していましたが、XercesやSaxon EEからエラーはありませんでした。

だから、あなたはすべてのことを正しく行ったようです。

エラーメッセージは、XSDバリデータがインポートを取得していないことを示しています。

私が推測しなければならないのは、問題の非常に簡潔な記述をしている間、再現性のあるエラーがないためです。バリデーターは、 svg:svgへの参照がpのコンテンツモデルに追加されたが、xs:importステートメントがまだスキーマドキュメントの先頭に追加されていないスキーマドキュメント。

おそらくあなたのPythonバイトコードが古く、あなたのPythonを再コンパイルする必要がありますか? (ピュア推測;私は、情報lxmlのは、コンパイル時に生成して、どれだけそれが実行時に発生どのくらいのスキーマを知らない)

関連する問題