4

我想知道使用片段标识符格式引用实体是否更好/更合适 - 基本上是通过在名称前插入哈希

[url] + # + [name]=>http://example.com/page/#webPage

编辑:

在来自慷慨而伟大的@Unor 的友好回答之后,我添加了此编辑以尝试限制我的查询范围并澄清我遇到的主要问题。我还删除了大部分原始问题(大约 95%)(事后看来)我觉得有损: 1. 我的核心问题;2. 对未来读者的益处。

简而言之,这是我的问题:

在微数据的 itemid 和 json-ld 的 @id 值开头手动输入哈希值的做法是否有效?

这是我更详细地表达的问题:

我可以在微数据的 itemid 值和 json-ld 的 @id 值中插入 HASH 符号 (#),以创建有效的结果 URI,并正确有效地使用片段标识符吗?

因此,如果这是在网页上:

<div itemscope itemtype="http://www.schema.org/Person" itemid="#joe"></div>

或者,如果这也在网页上:

{"@context":"http://schema.org",
"@type":"Person",
"@id":"#Joe"}

我知道他们会被读取来制作这样的 uri(假设消费者像谷歌的结构化数据测试工具那样进行相对构建):

http://www.example.com/page#joe

是不是 uri:

  1. 一个有效的 uri;和

  2. 是否正确使用了片段标识符(HASH)?

4

1 回答 1

9

在请求 URI 时允许检索有关实体的描述是一种很好的做法(请参阅用于语义 Web 的酷 URI:1. 在 Web 上。)。

通过使用Hash URI,您可以免费获得此功能:

  • http://example.com/flower代表关于一朵花的文件
  • http://example.com/flower#this代表花
  • → 检索时,您会获得有关http://example.com/flower#this的文档

通过使用Slash URIs,您必须自己实现重定向(状态码为 303):

  • http://example.com/flower代表关于一朵花的文件
  • http://example.com/flower/this代表花
  • → 检索时,您会得到 303 重定向到有关http://example.com/flower/this它的 URI (参见示例

因此,在不了解您的后端的情况下,我建议使用 Hash URI,因为它通常更容易设置。

(我不确定您对“网页实体”的确切含义,但只是为了确保:哈希 URI 应该用于“真实世界对象”,而不是文档。)


编辑(针对您更新的问题):

是的,您可以通过仅指定片段组件(以 a 开头)在itemid@id示例)中提供哈希 URI #

因此,在带有 URL 的文档上http://example.com/foobar,这四个语句生成相同的 Hash URI ( http://example.com/foobar#this):

<article itemscope itemtype="http://voc.example.net/Example" itemid="#this">
</article>

<article itemscope itemtype="http://voc.example.net/Example" itemid="http://example.com/foobar#this">
</article>

<script type="application/ld+json">
{
  "@context": "http://voc.example.net/",
  "@type": "Example",
  "@id": "#this" 
}
</script>

<script type="application/ld+json">
{
  "@context": "http://voc.example.net/",
  "@type": "Example",
  "@id": "http://example.com/foobar#this" 
}
</script>

(是的,您的示例 URI 是有效的;这是片段组件可能包含的字符。)

笔记:

  • 该片段区分大小写,因此您的itemid="#joe""@id":"#Joe"解析为不同的 URI(jvs. J)。
  • 当不指定绝对哈希 URI 时,您必须确保当前文档的 URL 是规范的。例如,尾部斜杠很重要(/page/#joevs. /page#joe);查询组件很重要(页面/page?foo=bar将创建 Hash URI /page?foo=bar#joe,而不是/page#joe);主人是否www.有事;URI 方案很重要(httpvs. https);等等
于 2015-11-10T21:48:12.563 回答