合法RDFa三元组需显式声明主语(via resource/about)、谓词(property为URI或vocab/prefix缩写)、宾语(元素内容或content属性),三者缺一不可;推荐优先用vocab简化schema.org场景,混用prefix与vocab须严控作用域。

property、typeof、resource 这三个属性是 HTML 中嵌入 RDFa 的核心,不是可选修饰,而是构成三元组(主语-谓词-宾语)的刚性要素。不按 RDFa 处理规则设置,浏览器或爬虫根本无法提取出有效结构化数据。
怎么写一个合法的 RDFa 三元组
RDFa 不是“加几个属性让语义更丰富”那么简单,它本质是在 HTML 标签上声明 RDF 语句。每个语句必须有主语(subject)、谓词(predicate)、宾语(object)。常见错误是只写 property,却没明确主语是谁——此时解析器会默认用当前文档 URL 作主语,结果常与预期不符。
-
about或resource显式指定主语(如resource="#person1"),适用于描述页面内某个实体 -
property是谓词,必须是 URI(如property="http://schema.org/name"),不能是简写;若用了prefix或vocab,才允许写property="name" - 宾语由元素内容(文本)、
content属性值,或datatype+ 内容共同决定;纯文本节点会被当作字符串字面量,除非显式用datatype声明为日期、数字等
为什么 prefix 和 vocab 不能混用
两者都用于缩写词汇表 URI,但作用域和优先级不同:vocab 设定默认词汇表前缀(如 vocab="https://schema.org/"),之后所有未带冒号的 property 都自动拼接该前缀;prefix 则定义命名空间映射(如 prefix="foaf: http://xmlns.com/foaf/0.1/"),需显式写成 property="foaf:name" 才生效。混用时若未注意作用域嵌套(比如在子元素上重设 vocab),会导致同一 property="name" 在不同位置解析出完全不同 URI。
- 推荐优先用
vocab简化 schema.org 场景(最常用) - 多源本体混合时(如同时用 schema.org 和 foaf),必须用
prefix显式区分,且避免在父容器设vocab后又在子元素用prefix覆盖同名前缀 -
vocab对typeof同样生效,而prefix不影响typeof解析
哪些 HTML 元素适合加 RDFa,哪些要避开
理论上任意 HTML 元素都可加 RDFa 属性,但实际中需兼顾语义合理性与解析稳定性。搜索引擎和结构化数据测试工具(如 Google Rich Results Test)对某些组合会静默忽略或报错。
立即学习“前端免费学习笔记(深入)”;
- 推荐:用
<div>或<span>包裹纯数据字段(如价格、评分),配合property+content;用<link>(自闭合)表示无内容的资源关系(如<link property="schema:image" href="cover.jpg">) - 慎用:
<p>、<section>等块级语义标签上直接加typeof,容易与原有语义冲突;若必须标注整段内容类型,优先考虑用<article typeof="schema:NewsArticle">这类已广泛支持的组合 - 避免:
<script>、<style>、<meta>内部加 RDFa 属性——这些元素不参与 DOM 渲染,多数解析器根本不处理其属性
真正难的是调试:RDFa 没有运行时报错,错写了只是“没数据”,连 console 都不会提示。建议每次修改后用 W3C RDFa Validator 直接解析 HTML 片段,比靠 Google 工具看富媒体效果更早暴露主语丢失、URI 拼接错误这类底层问题。



















