Я пытаюсь проверить пару XML файлов на соответствие их XSD (определение схемы xml). Если файл xml недействителен, я хотел бы указать причину. Я использую:
- Python 3.8.2 на Windows 10 (я могу sh Я мог бы использовать его на Linux)
- л xml Библиотека
Я получил следующие примеры от w3schools.com , чтобы проверить мой код. Но выполнение моего кода приводит к следующей ошибке:
AssertionError: Element 'note': No matching global declaration available for the validation root., line 2
Ошибка исчезнет, как только я заменю эту часть XSD:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="https://www.w3schools.com"
xmlns="https://www.w3schools.com"
elementFormDefault="qualified">
на
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
Может кто-нибудь объяснить, почему я получаю сообщение об ошибке?
Мой код
import os
import sys
from lxml import etree
class Validator:
def __init__(self, xsd_path):
parsed_xsd = etree.parse(xsd_path) # Parse content of xsd file to ElementTree object
self.xsdschema = etree.XMLSchema(parsed_xsd)
def validate_xml(self, xml_path):
parsed_xml = etree.parse(xml_path)
# result = self.xsdschema.validate(parsed_xml)
# return result
self.xsdschema.assert_(parsed_xml)
# Get current path of script
SCRIPT_PATH = os.path.dirname(os.path.realpath(__file__))
xsd_path = os.path.abspath(os.path.join(SCRIPT_PATH, 'note.xsd'))
xml_path = os.path.abspath(os.path.join(SCRIPT_PATH, 'note_example.xml'))
validator = Validator(xsd_path)
validator.validate_xml(xml_path)
note.xsd
<?xml version="1.0"?>
<!-- Here is the problematic part -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="https://www.w3schools.com"
xmlns="https://www.w3schools.com"
elementFormDefault="qualified">
<!-- End of problematic part -->
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
note_example. xml
<?xml version="1.0"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>