SaxonEE-9.9: экранирующий символ ‘@’ не разрешен в регулярном выражении

#saxon #xml-validation

#saxon #xml-проверка

Вопрос:

Я использую API-интерфейсы Saxon EE для проверки полезной нагрузки XML с помощью XSD. Моя среда — OSGi. Один из моих пользователей пытается экранировать символ @ в определении регулярного выражения. Я поделился фрагментом строки, который вызывает проблему.

 <xsd:restriction base="xsd:string">
    <xsd:pattern value=". @. .. "/>
</xsd:restriction>
  

Это вызывает следующую ошибку при загрузке xsd (внутри библиотеки saxon).

 Error at xsd:pattern on line 17 column 70 
    Syntax error at char 4 in regular expression: Escape character '@' not allowed
  

Не мог бы кто-нибудь поделиться какими-либо советами о том, как преодолеть эту проблему? Пожалуйста, дайте мне знать, если требуется полный xsd.

Ответ №1:

Правила XSD для регулярных выражений довольно строже, чем во многих других диалектах регулярных выражений: символы могут экранироваться, только если их действительно нужно экранировать, и если escape-последовательность имеет определенное значение. Для него не определен escape-символ @ , поэтому его следует просто записать как @ .

Причина правила заключается в совместимости с пересылкой: оно позволяет вводить новые escape-символы в будущем, не нарушая существующие схемы.