无法将模式添加到 xsd 中的任何 URI 字段
Unable to add pattern to anyURI field in xsd
我正在尝试向 anyURI 添加一个模式,这样我就可以消除 leading/trailing 和中间的空格,因为复制粘贴错误会产生很多问题。
到目前为止我能想到这个
<element name="randomUri">
<simpleType>
<restriction base="anyURI"><pattern value="\S(.*\S)?"/></restriction>
</simpleType>
</element>
但是当我尝试根据 xml 验证它时,它看起来好像与模式不匹配,我可以在它们之间给出 leading/trailing 和空格。如果我将它用于字符串,即当我在我的限制中制作 base="string"
时,这种模式非常有效。 anyURI 是否有一些独特的 属性 不允许我这样做?
P.S :我没有采用 pattern value = "http://.*
方式,因为我想适应 sample.app://sampleapp.
等自定义方案,例如
只是为了让事情更清楚...我想消除 leading/trailing 和 url 之间的空格。如果 randomUri
是 string
,我上面使用的模式完全可以正常工作,但是当我将 randomUri
设为 anyURI
时,它就不起作用了。
我用你提供的(小)样本测试了你的代码,其中一个问题似乎是你没有在 xs:element
上指定数量。所以它没有在 xs:pattern
上失败,它 在第一个 xs:pattern
上失败了。所以你应该在 xs:element
:
上指定一个量词
<element name="randomUri" maxOccurs="unbounded">
...
另一个简单的建议可能是使用 \S*
而不是 \S
在 URI 前后指定零个或多个 SPACE 个字符。也许这会改善匹配。
xs:anyURI
类型具有 collapse
的 whiteSpace
方面,这意味着在针对 pattern
方面测试前导空格和尾随空格会从值中删除.这基本上意味着前导和尾随空格总是被允许的(并且被认为是可忽略的)并且不能使用 pattern
方面来阻止。
我正在尝试向 anyURI 添加一个模式,这样我就可以消除 leading/trailing 和中间的空格,因为复制粘贴错误会产生很多问题。
到目前为止我能想到这个
<element name="randomUri">
<simpleType>
<restriction base="anyURI"><pattern value="\S(.*\S)?"/></restriction>
</simpleType>
</element>
但是当我尝试根据 xml 验证它时,它看起来好像与模式不匹配,我可以在它们之间给出 leading/trailing 和空格。如果我将它用于字符串,即当我在我的限制中制作 base="string"
时,这种模式非常有效。 anyURI 是否有一些独特的 属性 不允许我这样做?
P.S :我没有采用 pattern value = "http://.*
方式,因为我想适应 sample.app://sampleapp.
等自定义方案,例如
只是为了让事情更清楚...我想消除 leading/trailing 和 url 之间的空格。如果 randomUri
是 string
,我上面使用的模式完全可以正常工作,但是当我将 randomUri
设为 anyURI
时,它就不起作用了。
我用你提供的(小)样本测试了你的代码,其中一个问题似乎是你没有在 xs:element
上指定数量。所以它没有在 xs:pattern
上失败,它 在第一个 xs:pattern
上失败了。所以你应该在 xs:element
:
<element name="randomUri" maxOccurs="unbounded">
...
另一个简单的建议可能是使用 \S*
而不是 \S
在 URI 前后指定零个或多个 SPACE 个字符。也许这会改善匹配。
xs:anyURI
类型具有 collapse
的 whiteSpace
方面,这意味着在针对 pattern
方面测试前导空格和尾随空格会从值中删除.这基本上意味着前导和尾随空格总是被允许的(并且被认为是可忽略的)并且不能使用 pattern
方面来阻止。