首页 > 解决方案 > xsd 断言中的正则表达式仅限于元素值的开头

问题描述

我在 xsd 模式 1.1 中创建了包含正则表达式的断言。表达式应该从元素值的开头排除罗马数字和后面有句点和空格的数字。根据我的阅读,我不需要在 xsd 模式 b/c 中锚定正则表达式,它应该已经应用于开始(我可能误解了这一点)。我无法将正则表达式限制在开头。

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>

误报是:

Fid 的错误。R.克里姆。Z

装运 COD

我不能将开始与数字表达式 b/c 一起使用,这根本不起作用。但是,当我将starts-with 与其他表达式一起使用时,它不适用于整个元素值。

有没有办法将表达式限制为元素的第一个单词或开头?

标签: regexxmlxsdxsd-1.1

解决方案


我会发表评论,但还没有声誉点可以发表评论。但是您可以强制您的正则表达式开始,而不是这样做:

'[\d] ...

做这个:

'^\s*[\d] ..

"^" 强制开始,"\s*" 处理任何流氓空白。


推荐阅读