# SPDX-FileCopyrightText: Copyright © 2026 BBC
#
# SPDX-License-Identifier: BSD-3-Clause
from .xmlCheck import XmlCheck
from src.validationLogging.validationLogger import ValidationLogger
from src.validationLogging.validationCodes import ValidationCode
from xml.etree.ElementTree import Element
from xmlschema import XMLSchemaValidationError, XMLSchema
[docs]
class xsdValidator(XmlCheck):
def __init__(self,
xml_schema: XMLSchema,
schema_name: str) -> None:
super().__init__()
self._xmlSchema = xml_schema
self._schemaName = schema_name
[docs]
def run(
self,
input: Element,
context: dict,
validation_results: ValidationLogger) -> bool:
valid = True
try:
self._xmlSchema.validate(source=input)
except XMLSchemaValidationError as e:
valid = False
validation_results.error(
location=e.elem.tag,
message='Fails {} XSD validation: {}'.format(
self._schemaName, e.reason),
code=ValidationCode.xml_xsd
)
else:
validation_results.good(
location='Parsed document',
message='{} XSD Validation passes'.format(self._schemaName),
code=ValidationCode.xml_xsd
)
return valid