2017-11-15 9 views
1

SVG 이미지 태그를 지원하는 XSD 체계를 ISOSTS 확장하려고합니다. XSD scheme for SVG을 찾아 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"/> 
.... 

그러나 시도가 계획로드 할 때 오류가 있습니다 : 는 지금은 ISOSTS.xsd을 확장하려고

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

사실, 영업 이익은 않습니다 SVG 스키마를 가져옵니다. 그것은 일종의 XSD 추출물에 묻혀 있지만 거기에 있습니다. 나는 그것을 더 잘 보이게하기 위해 편집했습니다. –

1

세 가지 수정 사항 (SVG 네임 스페이스에 대한 네임 스페이스 바인딩 선언, SVG 네임 스페이스 가져 오기 및 svg : svg 요소 참조)을 복제했지만 Xerces 또는 Saxon EE에서 오류가 발생하지 않았습니다.

그래서 나는 모든 것을 올바르게했다고 생각합니다.

오류 메시지는 XSD 유효성 검사기가 가져 오기를 선택하지 않았 음을 나타냅니다.

내가 추측해야만한다면 (문제에 대한 매우 간결한 진술을했기 때문에 재현 할 수없는 오류가 발생했기 때문에) 유효성 검사기는 다음과 같은 임시 버전을보고 있습니다. svg : svg에 대한 참조가 p의 컨텐트 모델에 추가되었지만 xs : import 문이 아직 스키마 문서의 시작 부분에 추가되지 않은 스키마 문서.

아마도 파이썬 바이트 코드가 오래되었고 파이썬을 다시 컴파일해야 할 필요가 있을까요? (순수 추측은, 내가 정보 LXML 컴파일 시간과 얼마나 그것을 실행시 생성에서 생성하는 방법을 많이 스키마 모른다.)