当数据跨多个元素时如何使用 RDFa 标记文档

How to markup a document with RDFa when data is across multiple elements

我有以下 HTML 结构:

<address>
  <div>Address Line One</div>
  <div>Address Line Two</div>
  <div>Address Line Three</div>
  <div>Post Code</div>
</address>

由于我拥有的数据并不总是包含区域或地点,因此我无法可靠地使用 schema.org 中定义的属性 addressRegionaddressLocality。相反,我认为除了 post 代码之外,我应该对所有内容使用 streetAddress 属性。

我的问题是这是否是有效的 RDFa 标记?:

<address property="address" typeof="PostalAddress">
  <div property="streetAddress">Address Line One</div>
  <div property="streetAddress">Address Line Two</div>
  <div property="streetAddress">Address Line Three</div>
  <div property="postalCode">Post Code</div>
</address>

如果不是,是否有另一种方法可以在不改变 HTML 结构的情况下做到这一点?

您可以用更高级别 div 包装您的一系列 div 元素:

<address property="address" typeof="PostalAddress">
  <div property="streetAddress">
    <div>Address Line One</div>
    <div>Address Line Two</div>
    <div>Address Line Three</div>
  </div>
  <div property="postalCode">Post Code</div>
</address>

您的标记在语法上是有效的,但它可能没有传达您的意思。

您正在向 PostalAddress 节点添加 三个 个街道地址 (!),但是

  • 消费者没有理由认为这实际上是一个街道地址的三个部分,并且

  • RDFa 无论如何都不依赖于这些三元组的相对顺序(除非你使用 lists),所以当消费者查询你的数据时,这三个 streetAddress值可以按任何顺序出现。

所以如果不更改 某些东西(我不确定你对 "structure" 的确切含义)在你的 HTML 中,你无法解决这个问题.

,这是一个很好且简单的解决方案。

还有很多其他方法可以添加这个三元组(例如,添加一个 meta 元素给出完整的街道地址并从 div 元素中删除属性),但除非你有关于 can/cannot 在 HTML 中更改的内容的一些特殊限制,请使用 div.


关于您的标记的附注:

根据我的 recommendation for postal address markup,我将使用 br 元素来分隔街道地址行,如果需要分组,则使用可选的 span 元素,就像您的情况一样:

<address>
  <p property="schema:address" typeof="schema:PostalAddress">
    <span property="schema:streetAddress">
      Address Line One<br>
      Address Line Two<br>
      Address Line Three<br>
    </span>
    <span property="schema:postalCode">
      Post Code
    </span>
  </p>
</address>

也就是说,我会质疑您对 Schema.org 的 streetAddress property 的使用。不应包括地区或地方,因为它们不属于 "street address"。我只会标记实际的街道地址,即使在您的情况下这意味着该地区和地方不包含在图表中。