j127
1
我在 DiscussionForumPosting 的 Schema.org 数据中发现了一个 bug。
当我通过 验证器 运行一个随机的 Discourse 论坛主题时,它显示 @id 字段的 URL 不存在。
这是一个带有 /post_2 后缀的示例(这是一个 404 错误):
我认为这些 @id 字段应该是有效的 URL,因为 W3.org 说:
为了能够从外部引用图中的节点,节点拥有标识符非常重要。IRI 是链接数据的基本概念,要使节点真正链接,解引用标识符应该会产生该节点的表示。这可能允许应用程序检索有关节点的更多信息。
1 个赞
我想知道这是否是 validator 显示 id 的方式有问题。据我所知,id 是从标记中提取的,并不是我们自己定义的,例如:
<div id='post_1' itemscope itemtype='http://schema.org/DiscussionForumPosting' class='topic-body crawler-post'>
id='post_1 是 @id
如果您在 validator 中单击该 id 部分,它会正确地突出显示具有匹配 id 的帖子……因此,看起来 validator 可以正确识别它。
我注意到其他带有 @id 值的网站也有这种行为,例如在此 stackoverflow.com 问题中:

这也有同样的问题,https://stackoverflow.com/questions/7227202/answer-38775925 实际上并不是一个有效的 URL,它存在同样的错误,应该是 # 而不是 / https://stackoverflow.com/questions/7227202#answer-38775925。
是否有任何迹象表明这会在实际使用此数据时导致任何问题?
1 个赞
j127
3
这很有趣。我没想到会去检查 HTML 源代码,只是以为它是 JSON-LD。
Google 使用 schema 数据,但不确定他们是否使用这个特定的数据。schema.org 的文档写得不是很清楚。
看起来 Discourse 在每个主题上放置了多个 DiscussionForumPosting,但文档中的示例看起来 DiscussionForumPosting 可能指的是主帖而不是评论?文档列出了一个 comment 字段,其中包含一个 Comment(单数),尽管描述的措辞是复数。

我刚看了 Invison 是如何做的,它使用 JSON-LD,将 Comment 对象放在 comment 字段中。看起来发送到浏览器需要很多额外的文本。
我不知道答案是什么,但我稍后会尝试做更多研究。
1 个赞
我碰巧在这个论坛上潜水,这很方便。我拥有解析它的 Google 代码。
链接的帖子很好地回应了那个跑题的评论。我将在下面处理其余部分。
将 HTML id 属性解释为节点 ID 本质上是非标准的。这在 Google 的 microdata 解析的最初阶段就已完成,可能是出于模糊的原因。如果你想明确地这样做,你应该使用 itemid。我希望有一天能移除那个 hack,但要无损地移除它很难。
其次,IRI 不必是可解引用的。这是 W3C 的一项建议,但许多 IRI 并非如此,Google 绝对不要求这样做。
这只有在导致结构化数据中的节点无意中合并时才是一个问题,例如如果你在 HTML 中的其他地方使用了相同值的 itemid。否则,这只是一种可以忽略的怪异现象。
哦,请不要切换到 JSON-LD。老实说,对于像论坛这样的文本密集型标记来说,JSON-LD 是首选。不得不重复文本内容很愚蠢。它只是更容易编写,这就是我们一直在推动它的原因。
9 个赞