我正在尝试将一种模式添加到anyURI中,以消除前导/后缀和中间的空格,因为复制粘贴错误造成了很多问题。
到目前为止,我能够提出这个建议
<element name="randomUri">
<simpleType>
<restriction base="anyURI"><pattern value="\S(.*\S)?"/></restriction>
</simpleType>
</element>
但是当我尝试针对xml对其进行验证时,看起来好像与模式不匹配,我可以在它们之间加前导/后缀和空格。如果我对字符串使用了该模式,即在限制条件下使base="string"
时,该模式将非常有效。是否有anyURI的某些独特属性不允许我执行此操作?
P.S:我没有采用pattern value = "http://.*
的方式,因为我想适应sample.app://sampleapp.
之类的自定义方案,例如
只是为了使事情变得清楚...我想消除网址的前导/结尾和空格。如果上面的模式randomUri
是string
,那么我上面使用的模式就可以很好地工作,但是当我将randomUri
设为anyURI
时,它就无法工作。
答案 0 :(得分:1)
xs:anyURI
类型的whiteSpace
面为collapse
,这意味着在针对pattern
面进行测试之前,先从值中去除了前导和尾随空格。这基本上意味着,始终允许使用前导和尾随空格(并认为它们是可忽略的),并且无法使用pattern
构面来阻止。
答案 1 :(得分:0)
我用您提供的(小)样本测试了您的代码,其中的问题之一似乎是您没有在xs:element
上指定数量。因此它在xs:pattern
上没有失败,它在第一个xs:pattern
上没有失败。因此,您应该在xs:element
上指定一个量词:
<element name="randomUri" maxOccurs="unbounded">
...
另一个简单的建议可能是通过使用\S*
而不是\S
在URI之前和之后指定零个或多个SPACE字符。也许这会改善匹配度。