xsd类型的' anyURI'包含空格?

时间:2015-11-20 11:53:04

标签: xml xsd saml-2.0

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。

3 个答案:

答案 0 :(得分:3)

第一点:xs:anyURI数据类型的whiteSpace方面定义为“collapse”,这意味着忽略前导和尾随空格字符,并且内部空格序列等同于单个空格字符。

第二点:正如@ forty-two所述,如果您可以通过应用百分比编码获得合法URI,那么它是xs:anyURI的合法(XSD 1.0)实例:具体而言,"website one"是相对URI "website%20one"的合法表示。

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

最后,在XSD 1.1中,所有的注意都是关闭的:“anyURI的值空间是零个或多个字符的有限长度序列的集合(在[XML]中定义),它们匹配来自[XML的Char生成] ]。“从本质上讲,鉴于URI / IRI / LEIRI规范的多样性,已经有很多关于究竟什么是合法的和什么不合法的辩论,模式组决定,就有效性而言,任何事情都会发生。

答案 1 :(得分:2)

不是一个确定的确认,但你可能不会生气,至少不是因为这个原因。

即使 anyURI 中允许使用空格,包含它们也会非常愚蠢,因为根据RFC 3986,它们不允许在URI引用中使用。

但是,在XML模式规范中,就在您引用的注释之前,还有这段话:

  

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

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

答案 2 :(得分:2)

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

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

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