XXD-обработка lxml сообщает, что пустая строка не соответствует регулярному выражению, которому она должна соответствовать. Зачем? - PullRequest
2 голосов
/ 19 января 2012

Я пытаюсь проверить документ с помощью файла xsd, с lxml в Python:

from lxml import etree

xmlschema_doc = etree.parse('somefile.xsd')
xmlschema = etree.XMLSchema(xmlschema_doc)
xml_doc = etree.parse('somefile.xml')

xmlschema.assertValid(xml_doc)

Я получаю сообщение об ошибке:

lxml.etree.DocumentInvalid: Element 'someelement': [facet 'pattern'] The value '' is not accepted by the pattern '\s*.{0,10}\s*'., line 24

Строка 24:

<someelement></somelement>

Что указано в моем XSD-файле следующим образом:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
...
    <xs:simpleType name="someelement">
        <xs:restriction base="xs:string">
            <xs:pattern value="\s*.{0,10}\s*"/>
        </xs:restriction>
    </xs:simpleType>

Странно то, что пустая строка должна быть действительной для шаблона \s*.{0,10}\s*

У вас есть какое-нибудь объяснение?

Редактировать: Добавляет XSD-определение someelement и удаляет ссылку на python re

Ответы [ 2 ]

0 голосов
/ 25 марта 2015

в своем регулярном выражении удалите \ s, чтобы оно выглядело как

<xs:pattern value="*.{0,10}*"/>

Я использовал

<xsd:pattern value="(Pattern|.{0})"/>

, чтобы соответствовать шаблону или пробелу.

0 голосов
/ 19 января 2012

XSD - это отдельный стандарт от Python. Ваши шаблоны в файле XSD должны соответствовать синтаксису XSD.

Официальное определение регулярного выражения XSD здесь: http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/datatypes.html#dt-regex

...