xsd 类型的'anyURI'可以包含空格吗?



类型为anyURI的XML元素包含空格有效吗?

该模式表示确实如此,但表示非常不鼓励。

http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/#anyURI

NOTE: Spaces are, in principle, allowed in the ·lexical space· of anyURI, however, their use is highly discouraged (unless they are encoded by %20).

第三方正在为该受众设置非转义空格,例如"网站一"。但这似乎很奇怪,有人能确认我没有疯吗?)

更新

我应该提到,我指的是SAML2断言模式中的Audience元素,它只是将其声明为anyUri,但如果它同样可以是一个字符串("一二三"),为什么它甚至被设置为anyUri。

第一点:xs:anyURI数据类型的whiteSpace方面被定义为"collapse",这意味着忽略前导和尾随的空白字符,空白的内部序列相当于一个空格字符。

第二点:如@四十二所述,如果您可以通过应用百分比编码来获得合法的URI,那么它就是xs:anyURI的合法(XSD 1.0)实例:特别地,"website one"是相对URI "website%20one"的合法表示。

(我喜欢用"wannabe URI"一词来描述一个不是URI,但在应用转义后变成URI的字符串。XSD 1.0允许使用wannabe URI。这里的一个关键困难是,你不知道URI是否已经转义;如果应用转义两次,你会得到"website%2520one",这会让你陷入混乱。)

最后,在XSD 1.1中,所有的赌注都是否定的:"anyURI的值空间是一组零个或多个字符的有限长度序列(如[XML]中定义的),与[XML]的Char生成相匹配。",模式组决定,就有效性而言,任何事情都会发生。

这不是一个确切的确认,但你可能不会发疯,至少不是因为这个原因。

尽管anyURI中允许使用空格,但根据RFC 3986,在URI引用中不允许使用空格。

然而,在XML模式规范中,就在您引用的注释之前,还有这样一段话:

anyURI的·词法空间·是有限长度的字符序列,当将[XML链接语言]第5.4节中定义的算法应用于它们时,根据[RFC 2396](经[RFC 2732]修订)产生合法URI的字符串。

引用的算法指定在解析从anyURI元素派生的URI引用之前,应该转义";非法的";字符。

RFC 2396(早于3986,在生成XML Schema时是最新的)谈到使用空白字符"在许多上下文中分隔URI"。

因此,我们可以假设字符串"http://example.net/"" http://example.net/ "都是同一URI的表示。也就是说,它们在XMLSchema术语中的值空间中占据相同的点,但在词汇空间

这也可能会引起头痛,所以你最好不要使用空间。

最新更新