当数据跨多个元素时如何使用 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 中定义的属性 addressRegion
和 addressLocality
。相反,我认为除了 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"。我只会标记实际的街道地址,即使在您的情况下这意味着该地区和地方不包含在图表中。
我有以下 HTML 结构:
<address>
<div>Address Line One</div>
<div>Address Line Two</div>
<div>Address Line Three</div>
<div>Post Code</div>
</address>
由于我拥有的数据并不总是包含区域或地点,因此我无法可靠地使用 schema.org 中定义的属性 addressRegion
和 addressLocality
。相反,我认为除了 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"。我只会标记实际的街道地址,即使在您的情况下这意味着该地区和地方不包含在图表中。