【问题标题】:Is a "query string" allowed in a URI used in RDF?在 RDF 中使用的 URI 中是否允许使用“查询字符串”?
【发布时间】:2012-02-28 14:17:09
【问题描述】:

“资源描述框架 (RDF):概念和抽象语法”文档 Section 6.4 指出“RDF 图中的 URI 引用(RDF URI 引用)......将产生有效的 URI 字符序列(根据 RFC2396 , 第 2.1 节) 表示带有可选片段标识符的绝对 URI ... "

RFC 2396,第 2.1 节只讨论了单个字符的编码。它没有说明在 RDF 中允许标准 URI 的哪些部分。

在我看到的一些 RDF 文档中,术语“绝对 URI”似乎仅指 URI 的 domain.tld/path/name#optionalFragment 形式,但没有提及查询字符串 (?key1=value1&key2 =value2)(有时称为 CGI 数据)被允许或不允许。其他 RDF 文档仅使用术语“绝对 URI”,而不是相对 URI(/just/a/path)。

搜索“RDF URI 查询字符串”时会出现大量错误命中,例如 SPARQL。

所以,我的问题是:在 RDF 或 RDFa 中使用的 URI 中是否允许使用标准 HTML 查询字符串?

如果不是,为什么不呢?我了解 URI 不是 URL,不一定用于从服务器检索网页。但是,RDF 处理器读取这些 URI,我认为它们可以通过这些“查询”字符串传递的附加元数据的形式获得一些帮助。

[2012 年 2 月 9 日更新] 这是我的问题的重点:我正在寻找一种方法来指示连接的“强度”。例如,并不是每个人都对每个人都同样了解。我们可能刚刚在一次会议上见面了几分钟。或者我可能和某人住了很多年。对FAOF来说都是一样的。但是,如果我能够编写 foaf:knows?strength=+50 ,那么不知道如何处理强度键的处理器可以忽略它,而那些“强度感知”的处理器将拥有有价值的附加元数据。我可以创建一个包含术语“agreesWith”的词汇表,然后允许 strength= 键值的范围为 0 到 100(表示同意的百分比)。然后我会用一个词汇术语来涵盖整个协议范围。 {注:我曾考虑让范围从 -100 到 +100 以涵盖一系列分歧。但是,为了向后兼容,我们需要一个术语“disagreeWith”,以便不“了解强度”的处理器仍然知道“agreeWith”和不同意之间的区别。”}

就目前而言,RDF 推理者似乎无法区分“几乎不认识”和“比他自己更了解他”之间的区别。将键值对中具有不同值的每个不同谓词 URI 视为完全独立且完全不相关的谓词的决定似乎丢弃了几乎所有关于连接的最有价值的信息,这一切都是为了方便代码编写和快速处理。

除了创建完全独立的主语、谓词或宾语之外,查询字符串中的键值对可能还有其他有价值的用途:它们可用于指示谁将特定实体添加到联合编辑的 .RDF 文件中。就目前而言,RDF 推理器所知道的只是存在三元组,在外面,在某处吗?它没有其他信息可以作为推理的基础。加密密码短语可用于验证来源的可靠性,而不是简单地决定信任或不信任整个域。

【问题讨论】:

    标签: uri rdf


    【解决方案1】:

    是的。

    (什么,你想要更多?)

    RDF 指的是使用俗称“URL”的东西。如果您想要更准确,IRI(本质上是一种在 URL 中包含更多内容的方法,这就是您可以在浏览器栏中使用外来字符的原因)。最准确的答案太繁琐,无法关联,因此假设 IRI。

    RDF 使用绝对引用。它的语法可能使用相对引用(例如foo/bar),但它们相对于文档库被解析为绝对。实际上,就像 html 链接一样。

    除了语法之外,RDF 并不关心这些引用的内部。您只需逐个字符地比较它们。结果:

    • http://example.com/foo/bar == http://example.com/foo/bar
    • http://example.com/foo/bar?query=x == http://example.com/foo/bar?query=x
    • http://example.com/foo/bar != http://example.com/foo/bar?query=x
    • http://example.com/foo/bar#x == http://example.com/foo/bar#x
    • http://example.com/foo/bar != http://example.com/foo/bar#x
    • http://example.com/%66oo/bar != http://example.com/foo/bar

    请注意,您甚至没有得到规范化。

    尤其是 RDF 并不认为查询部分有什么特别之处。

    【讨论】:

    • 因此,如果我要编写一个 RDF 处理器,它将具有相同 domainName.tld/path/name/ 部分的任何 URI 视为相同的实体,然后将任何查询字符串仅视为有关特定连接的附加元数据,那么 RDF 处理器会超出规格吗?您认为以这种方式工作的 RDF 处理器会有兴趣吗?我不认为将 example.com/foo/bar 视为与 example.com/foo/bar#x 完全无关的逻辑,只是它使编程处理器更容易。 RDF 可能比这个系统更丰富。
    • 如果你应用了某种程度的标准化,这是有争议的。但是忽略查询字符串肯定是错误的。这表明http://example.com/?personid=xxx 对于所有xxx 都是相同的。但是你可以明确关系:插入一个链接到http://example.com/的关系(即三元组);或者您可以创建自定义 SPARQL 等价函数 ex:sameIgnoringQuery(x,y)
    • 好的,我想我现在可以透露我的秘密计划了。 :^) 有关更多信息,请参阅我的原始帖子。
    • 所以,答案似乎是:是的,允许包含 看起来 像查询字符串的字符串。但是,URI 的整个字符串由符合 RDF 的处理器作为一个单元读取,并且每个不同的字符串都被视为完全不同的 URI,而不是一个或多个方面略有不同的相同 URI。因此,在当前的 RDF 标准下,使用查询字符串没有实际价值。
    【解决方案2】:

    要确认上面的答案,是的。

    URI 是纯粹的语法,所以上面列出的规则适用。

    使用片段的 URI 不可取消引用,当代理尝试取消引用片段时,它会通过删除片段将其解析为另一个 URI(即 URL)。

    最后,建议您尽可能使用 IRI(国际化资源标识符)代替 URI

    http://www.ietf.org/rfc/rfc3987.txt

    这指定了不同的句法约束和限制。

    【讨论】:

    • 非常感谢。如果不是这个论坛,我永远不会听说 IRI。我知道我明天要读什么。
    猜你喜欢
    • 2018-03-31
    • 1970-01-01
    • 2015-02-06
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 2017-09-15
    • 1970-01-01
    • 2014-09-02
    相关资源
    最近更新 更多