SPARQL 中的有效 URI 是什么?
What is a valid URI in SPARQL?
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: The character violates the grammar rules for URIs/IRIs.
为什么?是按照规范还是我弄错了?
这里的验证器是正确的。问题是您在相对路径的第一段末尾有一个“:”。引用 section 4.2 of RFC 3986:
A path segment that contains a colon character (e.g., "this:that")
cannot be used as the first segment of a relative-path reference, as
it would be mistaken for a scheme name. Such a segment must be
preceded by a dot-segment (e.g., "./this:that") to make a relative-
path reference.
在 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 ":"
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: The character violates the grammar rules for URIs/IRIs.
为什么?是按照规范还是我弄错了?
这里的验证器是正确的。问题是您在相对路径的第一段末尾有一个“:”。引用 section 4.2 of RFC 3986:
A path segment that contains a colon character (e.g., "this:that") cannot be used as the first segment of a relative-path reference, as it would be mistaken for a scheme name. Such a segment must be preceded by a dot-segment (e.g., "./this:that") to make a relative- path reference.
在 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 ":"