如何解决SPARQL 中的有效 URI 是什么?
SPARQL 和 Turtle 都将 IRIREF
定义为不包含无效字符之一的 <
和 >
的产生式,有关详细信息,请参阅 RDF 3986。 URI 引用语法元素要么表示(绝对)URI,要么表示相对引用(如果它不能被解析为绝对 URI)。
这让我相信 urn,:
是一个相对引用,因为它不是以有效方案开头。但是,将其写入 validator:
SELECT ?a
WHERE {
BIND(<urn,:> as ?a)
}
失败:
[line: 3,col: 8 ] Bad IRI: 'urn,:': Code: 0/ILLEgal_CHaraCTER in SCHEME: 该字符违反了 URIs/IRI 的语法规则。
为什么?是按照规范还是我弄错了?
解决方法
验证器在这里是正确的。问题是您在相对路径的第一段末尾有一个“:”。引用 section 4.2 of RFC 3986:
包含冒号字符的路径段(例如,“this:that”) 不能用作相对路径引用的第一段,因为 它会被误认为是方案名称。这样的段必须是 前面是一个点段(例如,“./this:that”)来建立一个相对的- 路径引用。
在 ABNF 中,这表示为相对路径存在这样的产生式:
relative-part = "//" authority path-abempty
/ path-absolute
/ path-noscheme
/ path-empty
由于您的 URI 不以“/”开头且不为空,因此只有 path-noscheme
可能匹配:
path-noscheme = segment-nz-nc *( "/" segment )
segment-nz-nc
规则明确用于排除在路径的第一个元素中使用冒号:
segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" )
; non-zero-length segment without any colon ":"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。