with open('1-types.xsd', 'r') as baseschema_file:
baseschema=etree.parse(baseschema_file, parser=myParser)
baseschema.xinclude()
my_baseschema=etree.XMLSchema(baseschema)
with open('1-main.xsd', 'r') as schema_file:
mainschema=etree.parse(schema_file, parser=myParser)
my_schema=etree.XMLSchema(mainschema)
with open('1.xml') as file:
my_xml=etree.parse(file)
my_schema.assertValid(my_xml)
==> error
Traceback (most recent call last):
File "G:\lxml-test\test1.py", line 18, in <module>
my_schema.assertValid(my_xml)
File "src\lxml\etree.pyx", line 3623, in lxml.etree._Validator.assertValid
lxml.etree.DocumentInvalid: Element '{urn:paul:main1}Port': [facet 'pattern'] The value ':101001' is not accepted by the pattern ''., line 2
I did some more analysis, and in some situations this may work, however, the following scenario always fails
1-types.xsd includes the entities.dtd
1-main.xsd defines elements that use types defined in 1-types.xsd
1.xml instantiates the element from 1-main.xsd
entities.dtd ]{1,4}| [1-5][& digit;] {4}|6[0- 4][&digit; ]{3}|65[ 0-4][&digit; ]{2}|655[ 0-2][&digit; ]|6553[ 0-5])">
<!ENTITY digit "0-9">
<!ENTITY uword "([&digit;
<!ENTITY Port ":&uword;">
1-types.xsd www.w3. org/2001/ XMLSchema" xmlns=" urn:paul: types1" targetNamespace ="urn:paul: types1" elementFormDefa ult="qualified" attributeFormDe fault=" unqualified" >
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE schema SYSTEM "entities.dtd">
<xs:schema xmlns:xs="http://
<xs:simpleType name="PortType">
<xs:restriction base="xs:string">
<xs:pattern value="&Port;"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
1-main.xsd www.w3. org/2001/ XMLSchema" xmlns=" urn:paul: main1" xmlns:t= "urn:paul: types1" targetNamespace ="urn:paul: main1" elementFormDefa ult="qualified" attributeFormDe fault=" unqualified" > "urn:paul: types1" schemaLocation= "1-types. xsd"/>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE schema SYSTEM "entities.dtd">
<xs:schema xmlns:xs="http://
<xs:import namespace=
<xs:element name="Port" type="t:PortType"/>
</xs:schema>
1.xml urn:paul: main1" xmlns:xsi="http:// www.w3. org/2001/ XMLSchema- instance" xsi:schemaLocat ion="urn: paul:main1 1-main. xsd">:101001< /Port>
<?xml version="1.0" encoding="UTF-8"?>
<Port xmlns="
test1.py
import lxml
from lxml import etree
myParser = lxml.etree. XMLParser( )
with open('1-types.xsd', 'r') as baseschema_file: etree.parse( baseschema_ file, parser=myParser) xinclude( ) baseschema= etree.XMLSchema (baseschema)
baseschema=
baseschema.
my_
with open('1-main.xsd', 'r') as schema_file: etree.parse( schema_ file, parser=myParser) schema= etree.XMLSchema (mainschema)
mainschema=
my_
with open('1.xml') as file: xml=etree. parse(file) schema. assertValid( my_xml)
my_
my_
==> error test\test1. py", line 18, in <module> schema. assertValid( my_xml) etree.pyx" , line 3623, in lxml.etree. _Validator. assertValid DocumentInvalid : Element '{urn:paul: main1}Port' : [facet 'pattern'] The value ':101001' is not accepted by the pattern ''., line 2
Traceback (most recent call last):
File "G:\lxml-
my_
File "src\lxml\
lxml.etree.