Я создал утверждения в схеме xsd 1.1, содержащие регулярные выражения. Предполагается, что выражения исключают из начала значения элемента римские числа и числа, у которых есть точка и пробел после них. Из того, что я прочитал, мне не нужно привязывать регулярное выражение к схеме xsd, потому что оно уже должно применяться к началу (возможно, я неправильно понял это). Я не могу ограничить регулярные выражения началом.
XSD:
<xs:element name="node123">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:assertion test="not(matches($value, '[\d].*\.\s.|[I].*\.\s.*|[V].*\.\s.*|[X].*\.\s.*|[L].*\.\s.*|[C].*\.\s.*'))"/>
<xs:assertion test="not(starts-with($value, '-'))"/>
<xs:assertion test="not(starts-with($value, '–'))"/>
<xs:assertion test="not(starts-with($value, '—'))"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Ложные срабатывания это:
Мимаш Фида. Р. Крим. Z
Отправлено C.O.D
Я не могу использовать start-with с числовыми выражениями b/c, которые вообще не работают. Однако когда я использую start-with с другими выражениями, это не применяется ко всему значению элемента.
Есть ли способ ограничить выражения только первыми словами или началом элемента?
xs:assertion
сtest="not(matches($value, '([-–—]|[0-9IVXLC]+\.\s).*'))"
. Если оно не ведет себя как обычное регулярное выражение XSD, попробуйте добавить^
в начале. - person Wiktor Stribiżew   schedule 26.09.2019