2. Links (链接)
在本规范中,链接是两个资源之间的类型化连接,由以下部分组成:
- 链接上下文 (link context)
- 链接关系类型 (link relation type) (第2.1节)
- 链接目标 (link target)
- 可选的目标属性 (target attributes) (第2.2节)
链接可以被视为以下形式的陈述: "链接上下文在链接目标处具有链接关系类型资源,该资源具有目标属性"。
例如,"https://www.example.com/"在"https://example.com"处具有"canonical"资源,该资源具有"text/html"的"type"。
链接上下文和链接目标都是国际化资源标识符(Internationalized Resource Identifiers, IRIs) [RFC3987]。然而,在常见情况下,链接上下文也将是URI [RFC3986],因为许多协议(如HTTP)不支持解引用IRI。同样,链接目标有时会在不支持IRI的序列化中(例如第3节中定义的Link头字段)转换为URI(参见[RFC3987]第3.1节)。
本规范不对链接的基数施加限制;可以有多个指向特定目标和来自特定目标的链接,以及给定上下文和目标之间相同或不同类型的多个链接。同样,在任何特定序列化中或序列化之间(例如,Link头字段和内容中的链接)链接的相对顺序在本规范中未指定或不重要;希望考虑顺序重要的应用程序可以这样做。
链接在链接序列化中传达;它们是"线上的字节",可以以各种形式出现。例如,Atom [RFC4287]和HTML [W3C.REC-html5-20141028]都定义了将链接序列化到各自格式中的方式,第3节定义了如何在HTTP头字段中序列化链接。
本规范没有定义跨不同序列化的链接的通用语法,也没有强制要求任何给定链接的特定上下文;预期链接的序列化将指定这两个方面。
最后,链接由链接应用程序使用。通常,应用程序将定义它使用的链接关系类型,以及它们可能出现的序列化。例如,应用程序"Web浏览"在HTML链接序列化中(以及可选地在Link头字段中)查找"stylesheet"链接关系类型,而应用程序"AtomPub"在Atom序列化中使用"edit"和"edit-media"链接关系。
2.1. Link Relation Types (链接关系类型)
在最简单的情况下,链接关系类型标识链接的语义。例如,具有关系类型"copyright"的链接表示当前链接上下文在链接目标处具有版权资源。
链接关系类型还可用于指示目标资源具有特定属性或表现出特定行为;例如,"service"链接意味着链接目标可以用作定义协议的一部分(在这种情况下,是服务描述)。
关系类型不应与媒体类型[RFC2046]混淆;它们不标识解引用链接时产生的表示的格式。相反,它们仅描述当前上下文如何与另一个资源相关。
关系类型不应该(SHOULD NOT)基于另一个链接关系类型的存在或不存在或其自身的出现基数来推断任何额外的语义。一个例外是"alternate"和"stylesheet"注册关系类型的组合,由于历史原因,它在HTML中具有特殊含义。
有两种关系类型: 注册的和扩展的。
2.1.1. Registered Relation Types (注册的关系类型)
明确定义的关系类型可以注册为标记,以方便和/或促进其他应用程序的重用,使用第2.1.1.1节中的程序。
注册的关系类型名称必须(MUST)符合reg-rel-type规则(参见第3.3节),并且必须(MUST)以不区分大小写的方式逐字符比较。它们应该(SHOULD)适合关系类型的特定性;也就是说,如果语义对特定应用程序高度特定,名称应该反映这一点,以便更通用的名称可用于不太特定的用途。
注册的关系类型禁止(MUST NOT)约束链接上下文的媒体类型,并且禁止(MUST NOT)约束链接目标的可用表示媒体类型。但是,它们可以指定目标资源的行为和属性(例如,允许的HTTP方法,以及需要支持的请求和响应媒体类型)。
2.1.2. Extension Relation Types (扩展关系类型)
不希望注册关系类型的应用程序可以使用扩展关系类型,这是唯一标识关系类型的URI [RFC3986]。尽管URI可以指向包含关系类型语义定义的资源,但客户端不应该(SHOULD NOT)自动访问该资源以避免使其服务器负担过重。
用于扩展关系类型的URI应该(SHOULD)在定义它的人或方的控制之下或被委托给他们。
当比较扩展关系类型时,它们必须(MUST)作为字符串(如果以不同格式序列化,则在转换为URI后)以不区分大小写的方式逐字符比较。因此,应该(SHOULD)为扩展关系使用全小写URI。
请注意,虽然扩展关系类型需要是URI,但链接的序列化可以指定它们以另一种形式表示,只要它们可以转换为URI即可。
2.2. Target Attributes (目标属性)
目标属性是描述链接或其目标的键/值对列表;例如,媒体类型提示。
它们可以由各个链接关系类型和链接序列化定义。
本规范不尝试协调目标属性的名称、其基数或使用。创建和维护序列化的人应该(SHOULD)协调其目标属性以避免语义或语法冲突,并可以(MAY)定义自己的目标属性注册表。
目标属性的名称应该(SHOULD)符合token规则,但SHOULD NOT被限制为ASCII;它们应该(SHOULD)以不区分大小写的方式进行比较。