ActivityPub属性的range与functional特性定义位置及相关疑问
背景
Activity Streams 2.0的词汇表中包含表格,明确了每个属性的核心特性:
- functional:该属性是否为单值属性
- range:属性可接受的值类型
- subproperty of:该术语是某一引用术语的特化版本
但目前找不到ActivityPub新增属性的此类结构化特性说明。
以following属性为例的疑问
ActivityPub规范中对following的描述如下:
指向该Actor所关注的所有Actor组成的ActivityStreams集合的链接;详见5.4 关注集合
...
每个Actor都应拥有一个关注集合。这是该Actor所关注对象的列表,作为附加功能存在。关注集合必须是OrderedCollection或Collection类型,可根据认证用户权限或无认证时的适当规则进行过滤。
仅看这段描述,原本会认为following的range是Collection(和replies属性一致),但在官方示例及Mastodon实例返回的数据中,following的取值是一个IRI字符串:
"following": "https://example.org/users/johndoe/following",
由此引出三个核心问题:
following属性的正确range是什么?- 一个Object是否可以拥有多个
following值(即该属性是否为functional)? - 所有ActivityPub属性的这些特性定义在何处?
问题解答
1. following的正确range
ActivityPub完全继承了Activity Streams的资源引用规则:对于任何期望取值为Object/Collection类型的属性,既可以直接传入实体对象,也可以使用指向该资源的IRI字符串来间接引用。
因此following的range是Collection或OrderedCollection 或对应的IRI字符串,这和replies等Activity Streams原生属性的规则一致,只是ActivityPub没有用表格形式明确标注这一点。
2. following是否为functional属性
从规范中“每个Actor都应拥有一个关注集合”的描述可以明确推断:following是单值属性(即functional=true)。一个Actor只能关联一个关注集合的引用,不允许设置多个following值。
3. ActivityPub属性特性的定义位置
ActivityPub并没有为新增属性制作类似Activity Streams的结构化特性表格,这些特性大多隐含在规范的文字描述中,同时直接继承Activity Streams的通用规则(比如资源引用方式、属性基数要求等)。如果需要明确某个属性的特性,需要结合ActivityPub对应章节的文字描述,以及Activity Streams的基础规则来推导。
内容的提问来源于stack exchange,提问作者Laurence Gonsalves

