rfc9264.original | rfc9264.txt | |||
---|---|---|---|---|
Network Working Group E. Wilde | Internet Engineering Task Force (IETF) E. Wilde | |||
Internet-Draft Axway | Request for Comments: 9264 Axway | |||
Intended status: Standards Track H. Van de Sompel | Category: Standards Track H. Van de Sompel | |||
Expires: 6 November 2022 Data Archiving and Networked Services | ISSN: 2070-1721 Data Archiving and Networked Services | |||
5 May 2022 | July 2022 | |||
Linkset: Media Types and a Link Relation Type for Link Sets | Linkset: Media Types and a Link Relation Type for Link Sets | |||
draft-ietf-httpapi-linkset-10 | ||||
Abstract | Abstract | |||
This specification defines two formats and respective media types for | This specification defines two formats and associated media types for | |||
representing sets of links as stand-alone documents. One format is | representing sets of links as standalone documents. One format is | |||
JSON-based, the other aligned with the format for representing links | based on JSON, and the other is aligned with the format for | |||
in the HTTP "Link" header field. This specification also introduces | representing links in the HTTP "Link" header field. This | |||
a link relation type to support discovery of sets of links. | specification also introduces a link relation type to support the | |||
discovery of sets of links. | ||||
Note to Readers | ||||
Please discuss this draft on the "Building Blocks for HTTP APIs" | ||||
mailing list (https://www.ietf.org/mailman/listinfo/httpapi). | ||||
Online access to all versions and files is available on GitHub | ||||
(https://github.com/ietf-wg-httpapi/linkset). | ||||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on 6 November 2022. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc9264. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2022 IETF Trust and the persons identified as the | Copyright (c) 2022 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
in the Revised BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Terminology | |||
3. Use Cases and Motivation . . . . . . . . . . . . . . . . . . 3 | 3. Use Cases and Motivation | |||
3.1. Third-Party Links . . . . . . . . . . . . . . . . . . . . 4 | 3.1. Third-Party Links | |||
3.2. Challenges Writing to HTTP Link Header Field . . . . . . 5 | 3.2. Challenges Writing to the HTTP "Link" Header Field | |||
3.3. Large Number of Links . . . . . . . . . . . . . . . . . . 5 | 3.3. Large Number of Links | |||
4. Document Formats for Sets of Links . . . . . . . . . . . . . 5 | 4. Document Formats for Sets of Links | |||
4.1. HTTP Link Document Format: application/linkset . . . . . 7 | 4.1. HTTP Link Document Format: application/linkset | |||
4.2. JSON Document Format: application/linkset+json . . . . . 7 | 4.2. JSON Document Format: application/linkset+json | |||
4.2.1. Set of Links . . . . . . . . . . . . . . . . . . . . 8 | 4.2.1. Set of Links | |||
4.2.2. Link Context Object . . . . . . . . . . . . . . . . . 8 | 4.2.2. Link Context Object | |||
4.2.3. Link Target Object . . . . . . . . . . . . . . . . . 9 | 4.2.3. Link Target Object | |||
4.2.4. Link Target Attributes . . . . . . . . . . . . . . . 10 | 4.2.4. Link Target Attributes | |||
4.2.5. JSON Extensibility . . . . . . . . . . . . . . . . . 15 | 4.2.5. JSON Extensibility | |||
5. The "profile" parameter for media types to Represent Sets of | 5. The "profile" Parameter for Media Types to Represent Sets of | |||
Links . . . . . . . . . . . . . . . . . . . . . . . . . . 15 | Links | |||
6. The "linkset" Relation Type for Linking to a Set of Links . . 16 | 6. The "linkset" Relation Type for Linking to a Set of Links | |||
7. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 17 | 7. Examples | |||
7.1. Set of Links Provided as application/linkset . . . . . . 17 | 7.1. Set of Links Provided as "application/linkset" | |||
7.2. Set of Links Provided as application/linkset+json . . . . 18 | 7.2. Set of Links Provided as "application/linkset+json" | |||
7.3. Discovering a Link Set via the "linkset" Link Relation | 7.3. Discovering a Link Set via the "linkset" Link Relation Type | |||
Type . . . . . . . . . . . . . . . . . . . . . . . . . . 20 | 7.4. Link Set Profiles | |||
7.4. Link Set Profiles . . . . . . . . . . . . . . . . . . . . 21 | 7.4.1. Using a "profile" Attribute with a "linkset" Link | |||
7.4.1. Using a "profile" Attribute with a "linkset" Link . . 21 | 7.4.2. Using a "profile" Parameter with a Link Set Media Type | |||
7.4.2. Using a "profile" Parameter with a Link Set Media | 7.4.3. Using a Link with a "profile" Link Relation Type | |||
Type . . . . . . . . . . . . . . . . . . . . . . . . 21 | 8. IANA Considerations | |||
7.4.3. Using a Link with a "profile" Link Relation Type . . 22 | 8.1. Link Relation Type: linkset | |||
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 23 | 8.2. Media Type: application/linkset | |||
8.1. Link Relation Type: linkset . . . . . . . . . . . . . . . 23 | 8.3. Media Type: application/linkset+json | |||
8.2. Media Type: application/linkset . . . . . . . . . . . . . 23 | 9. Security Considerations | |||
8.3. Media Type: application/linkset+json . . . . . . . . . . 24 | 10. References | |||
9. Security Considerations . . . . . . . . . . . . . . . . . . . 25 | 10.1. Normative References | |||
10. Normative References . . . . . . . . . . . . . . . . . . . . 26 | 10.2. Informative References | |||
11. Informative References . . . . . . . . . . . . . . . . . . . 27 | Appendix A. JSON-LD Context | |||
Appendix A. JSON-LD Context . . . . . . . . . . . . . . . . . . 28 | Acknowledgements | |||
Appendix B. Implementation Status . . . . . . . . . . . . . . . 33 | Authors' Addresses | |||
B.1. GS1 . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 | ||||
B.2. FAIR Signposting Profile . . . . . . . . . . . . . . . . 34 | ||||
B.3. Open Journal Systems (OJS) . . . . . . . . . . . . . . . 34 | ||||
Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 34 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 35 | ||||
1. Introduction | 1. Introduction | |||
Resources on the Web often use typed Web Links [RFC8288], either | Resources on the Web often use typed Web Links [RFC8288], either | |||
embedded in resource representations, for example using the <link> | (1) embedded in resource representations -- for example, using the | |||
element for HTML documents, or conveyed in the HTTP "Link" header | <link> element for HTML documents or (2) conveyed in the HTTP "Link" | |||
field for documents of any media type. In some cases, however, | header field for documents of any media type. In some cases, | |||
providing links in this manner is impractical or impossible and | however, providing links in this manner is impractical or impossible, | |||
delivering a set of links as a stand-alone document is preferable. | and delivering a set of links as a standalone document is preferable. | |||
Therefore, this specification defines two formats for representing | Therefore, this specification defines two formats for representing | |||
sets of Web Links and their attributes as stand-alone documents. One | sets of Web Links and their attributes as standalone documents. One | |||
serializes links in the same format as used in the HTTP Link header | serializes links in the same format as the format used in the HTTP | |||
field, and the other serializes links in JSON. It also defines | "Link" header field, and the other serializes links in JSON. It also | |||
associated media types to represent sets of links, and the "linkset" | defines associated media types to represent sets of links, and the | |||
relation type that supports discovery of any resource that conveys a | "linkset" relation type to support the discovery of any resource that | |||
set of links as a stand-alone document. | conveys a set of links as a standalone document. | |||
2. Terminology | 2. Terminology | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
This specification uses the terms "link context" and "link target" in | This specification uses the terms "link context" and "link target" in | |||
the same manner as [RFC8288]. | the same manner that "Web Linking" [RFC8288] uses them. | |||
In the examples provided in this document, links in the HTTP "Link" | In the examples provided in this document, links in the HTTP "Link" | |||
header field are shown on separate lines in order to improve | header field are shown on separate lines in order to improve | |||
readability. Note, however, that as per Section 5.5 of | readability. Note, however, that as per Section 5.5 of "HTTP | |||
[I-D.ietf-httpbis-semantics], line breaks are deprecated in values | Semantics" [RFC9110], line breaks are deprecated in values for HTTP | |||
for HTTP fields; only whitespaces and tabs are supported as | fields; only whitespaces and tabs are supported as separators. | |||
separators. | ||||
3. Use Cases and Motivation | 3. Use Cases and Motivation | |||
The following sections describe use cases in which providing links by | The following sections describe use cases in which providing links by | |||
means of a standalone document instead of in an HTTP "Link" header | means of a standalone document instead of in an HTTP "Link" header | |||
field or as links embedded in the resource representation is | field or as links embedded in the resource representation is | |||
advantageous or necessary. | advantageous or necessary. | |||
For all scenarios, links could be provided by means of a stand-alone | For all scenarios, links could be provided by means of a standalone | |||
document that is formatted according to the JSON-based serialization, | document that is formatted according to the JSON-based serialization, | |||
the serialization aligned with the HTTP "Link" field format, or both. | the serialization aligned with the HTTP "Link" field format, or both. | |||
The former serialization is motivated by the widespread use of JSON | The former serialization is motivated by the widespread use of JSON | |||
and related tools, which suggests that handling sets of links | and related tools, which suggests that handling sets of links | |||
expressed as JSON documents should be attractive to developers. The | expressed as JSON documents should be attractive to developers. The | |||
latter serialization is provided for compatibility with the existing | latter serialization is provided for compatibility with the existing | |||
serialization used in the HTTP "Link" field and to allow reuse of | serialization used in the HTTP "Link" field and to allow the reuse of | |||
tools created to handle it. | tools created to handle it. | |||
It is important to keep in mind that when providing links by means of | It is important to keep in mind that when providing links by means of | |||
a standalone representation, other links can still be provided using | a standalone representation, other links can still be provided using | |||
other approaches, i.e. it is possible to combine various mechanisms | other approaches, i.e., it is possible to combine various mechanisms | |||
to convey links. | to convey links. | |||
3.1. Third-Party Links | 3.1. Third-Party Links | |||
In some cases it is useful that links pertaining to a resource are | In some cases, it is useful that links pertaining to a resource are | |||
provided by a server other than the one that hosts the resource. For | provided by a server other than the one that hosts the resource. For | |||
example, this allows: | example, this allows: | |||
* Providing links in which the resource is involved not just as link | * Providing links in which the resource is involved not just as a | |||
context but also as link target, with a different resource being | link context but also as a link target, with a different resource | |||
the link context. | being the link context. | |||
* Providing links pertaining to the resource that the server hosting | * Providing links pertaining to the resource that the server hosting | |||
that resource is not aware of. | that resource is not aware of. | |||
* External management of links pertaining to the resource in a | * External management of links pertaining to the resource in a | |||
special-purpose link management service. | special-purpose link management service. | |||
In such cases, links pertaining to a resource can be provided by | In such cases, links pertaining to a resource can be provided by | |||
another, specific resource. That specific resource may be managed by | another, specific resource. That specific resource may be managed, | |||
the same or by another custodian as the resource to which the links | by the same custodian or by another custodian, as the resource to | |||
pertain. For clients intent on consuming links provided in that | which the links pertain. For clients intent on consuming links | |||
manner, it would be beneficial if the following conditions were met: | provided in that manner, it would be beneficial if the following | |||
conditions were met: | ||||
* Links are provided in a document that uses a well-defined media | * Links are provided in a document that uses a well-defined media | |||
type. | type. | |||
* The resource to which the provided links pertain is able to link | * The resource to which the provided links pertain is able to link | |||
to the resource that provides these links using a well-known link | to the resource that provides these links using a well-known link | |||
relation type. | relation type. | |||
These requirements are addressed in this specification through the | These requirements are addressed in this specification through the | |||
definition of two media types and a link relation type, respectively. | definition of two media types and a link relation type, respectively. | |||
3.2. Challenges Writing to HTTP Link Header Field | 3.2. Challenges Writing to the HTTP "Link" Header Field | |||
In some cases, it is not straightforward to write links to the HTTP | In some cases, it is not straightforward to write links to the HTTP | |||
"Link" header field from an application. This can, for example, be | "Link" header field from an application. This can, for example, be | |||
the case because not all required link information is available to | the case because not all required link information is available to | |||
the application or because the application does not have the | the application or because the application does not have the | |||
capability to directly write HTTP fields. In such cases, providing | capability to directly write HTTP fields. In such cases, providing | |||
links by means of a standalone document can be a solution. Making | links by means of a standalone document can be a solution. Making | |||
the resource that provides these links discoverable can be achieved | the resource that provides these links discoverable can be achieved | |||
by means of a typed link. | by means of a typed link. | |||
skipping to change at page 5, line 27 ¶ | skipping to change at line 198 ¶ | |||
When conveying links in an HTTP "Link" header field, it is possible | When conveying links in an HTTP "Link" header field, it is possible | |||
for the size of the HTTP response fields to become unpredictable. | for the size of the HTTP response fields to become unpredictable. | |||
This can be the case when links are determined dynamically in a | This can be the case when links are determined dynamically in a | |||
manner dependent on a range of contextual factors. It is possible to | manner dependent on a range of contextual factors. It is possible to | |||
statically configure a web server to correctly handle large HTTP | statically configure a web server to correctly handle large HTTP | |||
response fields by specifying an upper bound for their size. But | response fields by specifying an upper bound for their size. But | |||
when the number of links is unpredictable, estimating a reliable | when the number of links is unpredictable, estimating a reliable | |||
upper bound is challenging. | upper bound is challenging. | |||
Section 15 of HTTP [I-D.ietf-httpbis-semantics] defines error codes | Section 15 of "HTTP Semantics" [RFC9110] defines error codes related | |||
related to excess communication by the user agent ("413 Request | to excess communication by the user agent ("413 Content Too Large" | |||
Entity Too Large" and "414 Request-URI Too Long"), but no specific | and "414 URI Too Long"), but no specific error codes are defined to | |||
error codes are defined to indicate that response field content | indicate that response field content exceeds the upper bound that can | |||
exceeds the upper bound that can be handled by the server and thus | be handled by the server and thus has been truncated. As a result, | |||
has been truncated. As a result, applications take counter measures | applications take countermeasures aimed at controlling the size of | |||
aimed at controlling the size of the HTTP "Link" header field, for | the HTTP "Link" header field -- for example, by limiting the links | |||
example by limiting the links they provide to those with select | they provide to those with select relation types, thereby limiting | |||
relation types, thereby limiting the value of the HTTP "Link" header | the value of the HTTP "Link" header field to clients. Providing | |||
field to clients. Providing links by means of a standalone document | links by means of a standalone document overcomes challenges related | |||
overcomes challenges related to the unpredictable (to the web server | to the unpredictable (to the web server implementation) nature of the | |||
implementation) nature of the size of HTTP "Link" header fields. | size of HTTP "Link" header fields. | |||
4. Document Formats for Sets of Links | 4. Document Formats for Sets of Links | |||
This section specifies two document formats to convey a set of links. | This section specifies two document formats to convey a set of links. | |||
Both are based on the abstract model specified in Section 2 of Web | Both are based on the abstract model specified in Section 2 of "Web | |||
Linking [RFC8288] that defines a link as consisting of a "link | Linking" [RFC8288], which defines a link as consisting of a "link | |||
context", a "link relation type", a "link target", and optional | context", a "link relation type", a "link target", and optional | |||
"target attributes": | "target attributes": | |||
* The format defined in Section 4.1 is nearly identical to the field | * The format defined in Section 4.1 is nearly identical to the field | |||
value of the HTTP "Link" header field as specified in Section 3 of | value of the HTTP "Link" header field as specified in Section 3 of | |||
[RFC8288]. | [RFC8288]. | |||
* The format defined in Section 4.2 is expressed in JSON [RFC8259]. | * The format defined in Section 4.2 is expressed in JSON [RFC8259]. | |||
Links provided in the HTTP Link header are intended to be used in the | Links provided in the HTTP "Link" header field are intended to be | |||
context of an HTTP interaction and contextual information that is | used in the context of an HTTP interaction, and contextual | |||
available during an interaction is used to correctly interpret them. | information that is available during an interaction is used to | |||
Links provided in link sets, however, can be re-used outside of an | correctly interpret them. Links provided in link sets, however, can | |||
HTTP interaction, when no such contextual information is available. | be reused outside of an HTTP interaction, when no such contextual | |||
As a result, implementers of link sets should strive to make them | information is available. As a result, implementers of link sets | |||
self-contained by adhering to the following recommendations. | should strive to make them self-contained by adhering to the | |||
following recommendations. | ||||
For links provided in the HTTP Link header that have no anchor or | For links provided in the HTTP "Link" header field that have no | |||
that use relative references, the URI of the resource that delivers | anchor or that use relative references, the URI of the resource that | |||
the links provides the contextual information that is needed for | delivers the links provides the contextual information that is needed | |||
their correct interpretation. In order to support use cases where | for their correct interpretation. In order to support use cases | |||
link set documents are re-used outside the context of an HTTP | where link set documents are reused outside the context of an HTTP | |||
interaction, it is RECOMMENDED to make them self-contained by | interaction, it is RECOMMENDED to make them self-contained by | |||
adhering to the following guidelines: | adhering to the following guidelines: | |||
* For every link provided in the set of links, explicitly provide | * For every link provided in the set of links, explicitly provide | |||
the link context using the "anchor" attribute. | the link context using the "anchor" attribute. | |||
* For link context ("anchor" attribute) and link target ("href" | * For the link context ("anchor" attribute) and link target ("href" | |||
attribute), use URI references that are not relative references | attribute), use URI references that are not relative references | |||
(as defined in Section 4.1 of [RFC3986]). | (as defined in Section 4.1 of [RFC3986]). | |||
If these recommendations are not followed, interpretation of links in | If these recommendations are not followed, the interpretation of | |||
link set documents will depend on which URI is used as context. | links in link set documents will depend on which URI is used as the | |||
context. | ||||
For a "title" attribute provided on a link in the HTTP Link header, | For a "title" attribute provided on a link in the HTTP "Link" header | |||
the language in which the title is expressed is provided by the | field, the language in which the title is expressed is provided by | |||
Content-Language header of the HTTP interaction with the resource | the "Content-Language" header field of the HTTP interaction with the | |||
that delivers the links. This does not apply to "title" attributes | resource that delivers the links. This does not apply to "title" | |||
provided for links in link set documents because that would constrain | attributes provided for links in link set documents because that | |||
all links in a link set to having a single title language and would | would constrain all links in a link set to having a single title | |||
not support determining title languages when a link set is used | language and would not support determining title languages when a | |||
outside of an HTTP interaction. In order to support use cases where | link set is used outside of an HTTP interaction. In order to support | |||
link set documents are re-used outside the context of an HTTP | use cases where link set documents are reused outside the context of | |||
interaction, it is RECOMMENDED to make them self-contained by using | an HTTP interaction, it is RECOMMENDED to make them self-contained by | |||
the "title*" attribute instead of the "title" attribute because | using the "title*" attribute instead of the "title" attribute because | |||
"title*" allows expressing the title language as part of its value by | "title*" allows expressing the title language as part of its value by | |||
means of a language tag. With this regard, note that language tags | means of a language tag. Note that, in this regard, language tags | |||
are matched case-insensitively (see Section 2.1.1 of [RFC5646]). If | are matched case insensitively (see Section 2.1.1 of [RFC5646]). If | |||
this recommendation is not followed, accurately determining the | this recommendation is not followed, accurately determining the | |||
language of titles provided on links in link set documents will not | language of titles provided on links in link set documents will not | |||
be possible. | be possible. | |||
Note also that Section 3.3 of [RFC8288] deprecates the "rev" | Note also that Section 3.3 of [RFC8288] deprecates the "rev" | |||
construct that was provided by [RFC5988] as a means to express links | construct that was provided by [RFC5988] as a means to express links | |||
with a directionality that is the inverse of direct links that use | with a directionality that is the inverse of direct links that use | |||
the "rel" construct. In both serializations for link sets defined | the "rel" construct. In both serializations for link sets defined | |||
here, inverse links may be represented as direct links using the | here, inverse links may be represented as direct links using the | |||
"rel" construct and by switching the roles of the resources involved | "rel" construct and by switching the roles of the resources involved | |||
in the link. | in the link. | |||
4.1. HTTP Link Document Format: application/linkset | 4.1. HTTP Link Document Format: application/linkset | |||
This document format is nearly identical to the field value of the | This document format is nearly identical to the field value of the | |||
HTTP "Link" header field as defined in Section 3 of [RFC8288], more | HTTP "Link" header field as defined in Section 3 of [RFC8288], more | |||
specifically by its ABNF [RFC5234] production rule for "Link" and | specifically by its ABNF [RFC5234] production rule for "Link" and its | |||
subsequent ones. It differs from the format for field values of the | subsequent rules. It differs from the format for field values of the | |||
HTTP "Link" header only in that not only spaces and horizontal tabs | HTTP "Link" header field only in that not only spaces and horizontal | |||
are allowed as separators but also newline characters as a means to | tabs are allowed as separators but also newline characters as a means | |||
improve readability for humans. The use of non-ASCII characters in | to improve readability for humans. The use of non-ASCII characters | |||
the field value of the HTTP "Link" Header field is not allowed, and | in the field value of the HTTP "Link" header field is not allowed and | |||
as such is also not allowed in "application/linkset" link sets. | as such is also not allowed in "application/linkset" link sets. | |||
The assigned media type for this format is "application/linkset". | The assigned media type for this format is "application/linkset". | |||
When converting an "application/linkset" document to a field value | When converting an "application/linkset" document to a field value | |||
for the HTTP "Link" header, newline characters MUST be removed or | for the HTTP "Link" header field, newline characters MUST be removed | |||
MUST be replaced by white space (SP) in order to comply with | or MUST be replaced by whitespace (SP) in order to comply with | |||
Section 5.5 of [I-D.ietf-httpbis-semantics]. | Section 5.5 of [RFC9110]. | |||
Implementers of "application/linkset" link sets should strive to make | Implementers of "application/linkset" link sets should strive to make | |||
them self-contained by following the recommendations regarding their | them self-contained by following the recommendations provided in | |||
use outside the context of an HTTP interaction provided in Section 4. | Section 4 regarding their use outside the context of an HTTP | |||
interaction. | ||||
It should be noted that the "application/linkset" format specified | It should be noted that the "application/linkset" format specified | |||
here is different from the "application/link-format" format specified | here is different from the "application/link-format" format specified | |||
in [RFC6690] in that the former fully matches the field value of the | in [RFC6690] in that the former fully matches the field value of the | |||
HTTP "Link" header field as defined in Section 3 of [RFC8288], | HTTP "Link" header field as defined in Section 3 of [RFC8288], | |||
whereas the latter introduces constraints on that definition to meet | whereas the latter introduces constraints on that definition to meet | |||
requirements for Constrained RESTful Environments (CoRE). | requirements for Constrained RESTful Environments (CoRE). | |||
4.2. JSON Document Format: application/linkset+json | 4.2. JSON Document Format: application/linkset+json | |||
This document format uses JSON [RFC8259] as the syntax to represent a | This document format uses JSON [RFC8259] as the syntax to represent a | |||
set of links. The set of links follows the abstract model defined by | set of links. The set of links follows the abstract model defined by | |||
Web Linking Section 2 of [RFC8288]. | Section 2 of [RFC8288]. | |||
The assigned media type for this format is "application/ | The assigned media type for this format is "application/ | |||
linkset+json". | linkset+json". | |||
In the interests of interoperability "application/linkset+json" link | In the interests of interoperability, "application/linkset+json" link | |||
sets MUST be encoded using UTF-8 as per Section 8.1 of [RFC8259]. | sets MUST be encoded using UTF-8 as per Section 8.1 of [RFC8259]. | |||
Implementers of "application/linkset+json" link sets should strive to | Implementers of "application/linkset+json" link sets should strive to | |||
make them self-contained by following the recommendations regarding | make them self-contained by following the recommendations provided in | |||
their use outside the context of an HTTP interaction provided in | Section 4 regarding their use outside the context of an HTTP | |||
Section 4. | interaction. | |||
The "application/linkset+json" serialization allows for OPTIONAL | The "application/linkset+json" serialization allows for OPTIONAL | |||
support of a JSON-LD serialization. This can be achieved by adding | support of a JSON-LD serialization. This can be achieved by adding | |||
an appropriate context to the "application/linkset+json" | an appropriate context to the "application/linkset+json" | |||
serialization using the approach described in Section 6.8. of | serialization using the approach described in Section 6.1 of | |||
[W3C.REC-json-ld-20140116]. Communities of practice can decide which | [W3C.REC-json-ld]. Communities of practice can decide which context | |||
context best meets their application needs. Appendix A shows an | best meets their application needs. Appendix A shows an example of a | |||
example of a possible context that, when added to a JSON | possible context that, when added to a JSON serialization, allows it | |||
serialization, allows it to be interpreted as Resource Description | to be interpreted as Resource Description Framework (RDF) data | |||
Framework (RDF) [W3C.REC-rdf11-concepts-20140225] data. | [W3C.REC-rdf11-concepts]. | |||
4.2.1. Set of Links | 4.2.1. Set of Links | |||
In the JSON representation of a set of links: | In the JSON representation of a set of links: | |||
* A set of links is represented in JSON as an object which MUST | * A set of links is represented in JSON as an object that MUST | |||
contain "linkset" as its sole member. | contain "linkset" as its sole member. | |||
* The value of the "linkset" member is an array in which a distinct | * The value of the "linkset" member is an array in which a distinct | |||
JSON object - the "link context object" (see Section 4.2.2) - is | JSON object -- the "link context object" (see Section 4.2.2) -- is | |||
used to represent links that have the same link context. | used to represent links that have the same link context. | |||
* Even if there is only one link context object, it MUST be wrapped | * Even if there is only one link context object, it MUST be wrapped | |||
in an array. | in an array. | |||
4.2.2. Link Context Object | 4.2.2. Link Context Object | |||
In the JSON representation one or more links that have the same link | In the JSON representation, one or more links that have the same link | |||
context are represented by a JSON object, the link context object. A | context are represented by a JSON object -- the link context object. | |||
link context object adheres to the following rules: | A link context object adheres to the following rules: | |||
* Each link context object MAY contain an "anchor" member with a | * Each link context object MAY contain an "anchor" member with a | |||
value that represents the link context. If present, this value | value that represents the link context. If present, this value | |||
MUST be a URI reference and SHOULD NOT be a relative reference as | MUST be a URI reference and SHOULD NOT be a relative reference as | |||
defined in Section 4.1 of [RFC3986]. | defined in Section 4.1 of [RFC3986]. | |||
* For each distinct relation type that the link context has with | * For each distinct relation type that the link context has with | |||
link targets, a link context object MUST contain an additional | link targets, a link context object MUST contain an additional | |||
member. The value of this member is an array in which a distinct | member. The value of this member is an array in which a distinct | |||
JSON object - the "link target object" (see Section 4.2.3) - MUST | JSON object -- the "link target object" (see Section 4.2.3) -- | |||
be used for each link target for which the relationship with the | MUST be used for each link target for which the relationship with | |||
link context (value of the encompassing anchor member) applies. | the link context (value of the encompassing "anchor" member) | |||
The name of this member expresses the relation type of the link as | applies. The name of this member expresses the relation type of | |||
follows: | the link as follows: | |||
- For registered relation types (Section 2.1.1 of [RFC8288]), the | - For registered relation types (Section 2.1.1 of [RFC8288]), the | |||
name of this member is the registered name of the relation | name of this member is the registered name of the relation | |||
type. | type. | |||
- For extension relation types (Section 2.1.2 of [RFC8288]), the | - For extension relation types (Section 2.1.2 of [RFC8288]), the | |||
name of this member is the URI that uniquely represents the | name of this member is the URI that uniquely represents the | |||
relation type. | relation type. | |||
* Even if there is only one link target object it MUST be wrapped in | * Even if there is only one link target object, it MUST be wrapped | |||
an array. | in an array. | |||
4.2.3. Link Target Object | 4.2.3. Link Target Object | |||
In the JSON representation a link target is represented by a JSON | In the JSON representation, a link target is represented by a JSON | |||
object, the link target object. A link target object adheres to the | object -- the link target object. A link target object adheres to | |||
following rules: | the following rules: | |||
* Each link target object MUST contain an "href" member with a value | * Each link target object MUST contain an "href" member with a value | |||
that represents the link target. This value MUST be a URI | that represents the link target. This value MUST be a URI | |||
reference and SHOULD NOT be a relative reference as defined in | reference and SHOULD NOT be a relative reference as defined in | |||
Section 4.1 of [RFC3986]. Cases where the href member is present, | Section 4.1 of [RFC3986]. Cases where the "href" member is | |||
but no value is provided for it (i.e. the resource providing the | present but no value is provided for it (i.e., the resource | |||
set of links is the target of the link in the link target object) | providing the set of links is the target of the link in the link | |||
MUST be handled by providing an "href" member with an empty string | target object) MUST be handled by providing an "href" member with | |||
as its value ("href": ""). | an empty string as its value ("href": ""). | |||
* In many cases, a link target is further qualified by target | * In many cases, a link target is further qualified by target | |||
attributes. Various types of attributes exist and they are | attributes. Various types of attributes exist, and they are | |||
conveyed as additional members of the link target object as | conveyed as additional members of the link target object as | |||
detailed in Section 4.2.4. | detailed in Section 4.2.4. | |||
The following example of a JSON-serialized set of links represents | The following example of a JSON-serialized set of links represents | |||
one link with its core components: link context, link relation type, | one link with its core components: link context, link relation type, | |||
and link target. | and link target. | |||
{ "linkset": | { "linkset": | |||
[ | [ | |||
{ "anchor": "https://example.net/bar", | { "anchor": "https://example.net/bar", | |||
"next": [ | "next": [ | |||
{"href": "https://example.com/foo"} | {"href": "https://example.com/foo"} | |||
] | ] | |||
} | } | |||
] | ] | |||
} | } | |||
Figure 1 | Figure 1: Simple linkset example | |||
The following example of a JSON-serialized set of links represents | The following example of a JSON-serialized set of links represents | |||
two links that share link context and relation type but have | two links that share a link context and relation type but have | |||
different link targets. | different link targets. | |||
{ "linkset": | { "linkset": | |||
[ | [ | |||
{ "anchor": "https://example.net/bar", | { "anchor": "https://example.net/bar", | |||
"item": [ | "item": [ | |||
{"href": "https://example.com/foo1"}, | {"href": "https://example.com/foo1"}, | |||
{"href": "https://example.com/foo2"} | {"href": "https://example.com/foo2"} | |||
] | ] | |||
} | } | |||
] | ] | |||
} | } | |||
Figure 2 | Figure 2: Linkset with two links with the same context | |||
The following example shows a set of links that represents two links, | The following example shows a set of links that represents two links, | |||
each with a different link context, link target, and relation type. | each with a different link context, link target, and relation type. | |||
One relation type is registered, the other is an extension relation | One relation type is registered, and the other is an extension | |||
type. | relation type. | |||
{ "linkset": | { "linkset": | |||
[ | [ | |||
{ "anchor": "https://example.net/bar", | { "anchor": "https://example.net/bar", | |||
"next": [ | "next": [ | |||
{"href": "https://example.com/foo1"} | {"href": "https://example.com/foo1"} | |||
] | ] | |||
}, | }, | |||
{ "anchor": "https://example.net/boo", | { "anchor": "https://example.net/boo", | |||
"https://example.com/relations/baz" : [ | "https://example.com/relations/baz" : [ | |||
{"href": "https://example.com/foo2"} | {"href": "https://example.com/foo2"} | |||
] | ] | |||
} | } | |||
] | ] | |||
} | } | |||
Figure 3 | Figure 3: Linkset with two links with different contexts | |||
4.2.4. Link Target Attributes | 4.2.4. Link Target Attributes | |||
A link may be further qualified by target attributes as defined by | A link may be further qualified by target attributes as defined by | |||
Section 2 of Web Linking [RFC8288]. Three types of attributes exist: | Section 2 of [RFC8288]. Three types of attributes exist: | |||
* Serialisation-defined attributes described in Section 3.4.1 of Web | * Serialization-defined attributes as described in Section 3.4.1 of | |||
Linking [RFC8288]. | [RFC8288]. | |||
* Extension attributes defined and used by communities as allowed by | * Extension attributes defined and used by communities as allowed by | |||
Section 3.4.2 of [RFC8288]. | Section 3.4.2 of [RFC8288]. | |||
* Internationalized versions of the "title" attribute defined by | * Internationalized versions of the "title" attribute as defined by | |||
[RFC8288] and of extension attributes allowed by Section 3.4 of | [RFC8288] and of extension attributes allowed by Section 3.4 of | |||
[RFC8288]. | [RFC8288]. | |||
The handling of these different types of attributes is described in | The handling of these different types of attributes is described in | |||
the sections below. | the sections below. | |||
4.2.4.1. Target Attributes Defined by Web Linking | 4.2.4.1. Target Attributes Defined by Web Linking | |||
Section 3.4.1 of [RFC8288] defines the following target attributes | Section 3.4.1 of [RFC8288] defines the following target attributes | |||
that may be used to annotate links: "hreflang", "media", "title", | that may be used to annotate links: "hreflang", "media", "title", | |||
"title*", and "type"; these target attributes follow different | "title*", and "type"; these target attributes follow different | |||
occurrence and value patterns. In the JSON representation, these | occurrence and value patterns. In the JSON representation, these | |||
attributes MUST be conveyed as additional members of the link target | attributes MUST be conveyed as additional members of the link target | |||
object as follows: | object as follows: | |||
* "hreflang": The "hreflang" target attribute, defined as optional | "hreflang": The "hreflang" target attribute, defined as optional and | |||
and repeatable by [RFC8288], MUST be represented by an "hreflang" | repeatable by [RFC8288], MUST be represented by an "hreflang" | |||
member, and its value MUST be an array (even if there only is one | member, its value MUST be an array (even if there is only one | |||
value to be represented), and each value in that array MUST be a | value to be represented), and each value in that array MUST be a | |||
string - representing one value of the "hreflang" target attribute | string -- representing one value of the "hreflang" target | |||
for a link - which follows the same model as in the [RFC8288] | attribute for a link -- that follows the same model as the syntax | |||
syntax. | discussed in [RFC8288]. | |||
* "media": The "media" target attribute, defined as optional and not | "media": The "media" target attribute, defined as optional and not | |||
repeatable by [RFC8288], MUST be represented by a "media" member | repeatable by [RFC8288], MUST be represented by a "media" member | |||
in the link target object, and its value MUST be a string that | in the link target object, and its value MUST be a string that | |||
follows the same model as in the [RFC8288] syntax. | follows the same model as the syntax discussed in [RFC8288]. | |||
* "type": The "type" target attribute, defined as optional and not | ||||
repeatable by [RFC8288], MUST be represented by a "type" member in | ||||
the link target object, and its value MUST be a string that | ||||
follows the same model as in the [RFC8288] syntax. | ||||
* "title": The "title" target attribute, defined as optional and not | "title": The "title" target attribute, defined as optional and not | |||
repeatable by [RFC8288], MUST be represented by a "title" member | repeatable by [RFC8288], MUST be represented by a "title" member | |||
in the link target object, and its value MUST be a JSON string. | in the link target object, and its value MUST be a JSON string. | |||
* "title*": The "title*" target attribute, defined as optional and | "title*": The "title*" target attribute, defined as optional and not | |||
not repeatable by [RFC8288], is motivated by character encoding | repeatable by [RFC8288], is motivated by character encoding and | |||
and language issues and follows the model defined in [RFC8187]. | language issues and follows the model defined in [RFC8187]. The | |||
The details of the JSON representation that applies to title* are | details of the JSON representation that applies to "title*" are | |||
described in Section 4.2.4.2. | described in Section 4.2.4.2. | |||
The following example illustrates how the repeatable "hreflang" and | "type": The "type" target attribute, defined as optional and not | |||
the not repeatable "type" target attributes are represented in a link | repeatable by [RFC8288], MUST be represented by a "type" member in | |||
target object. | the link target object, and its value MUST be a string that | |||
follows the same model as the syntax discussed in [RFC8288]. | ||||
The following example illustrates how the "hreflang" (repeatable) | ||||
target attribute and the "type" (not repeatable) target attribute are | ||||
represented in a link target object. | ||||
{ "linkset": | { "linkset": | |||
[ | [ | |||
{ "anchor": "https://example.net/bar", | { "anchor": "https://example.net/bar", | |||
"next": [ | "next": [ | |||
{ "href": "https://example.com/foo", | { "href": "https://example.com/foo", | |||
"type": "text/html", | "type": "text/html", | |||
"hreflang": [ "en" , "de" ] | "hreflang": [ "en" , "de" ] | |||
} | } | |||
] | ] | |||
} | } | |||
] | ] | |||
} | } | |||
Figure 4 | Figure 4: Linkset with "hreflang" and "type" target attributes | |||
4.2.4.2. Internationalized Target Attributes | 4.2.4.2. Internationalized Target Attributes | |||
In addition to the target attributes described in Section 4.2.4.1, | In addition to the target attributes described in Section 4.2.4.1, | |||
Section 3.4 of [RFC8288] also supports attributes that follow the | Section 3.4 of [RFC8288] also supports attributes that follow the | |||
content model of [RFC8187]. In [RFC8288], these target attributes | content model of [RFC8187]. In [RFC8288], these target attributes | |||
are recognizable by the use of a trailing asterisk in the attribute | are recognizable by the use of a trailing asterisk in the attribute | |||
name, such as "title*". The content model of [RFC8187] uses a | name, such as "title*". The content model of [RFC8187] uses a | |||
string-based microsyntax that represents the character encoding, an | string-based microsyntax that represents the character encoding, an | |||
optional language tag, and the escaped attribute value encoded | optional language tag, and the escaped attribute value encoded | |||
according to the specified character encoding. | according to the specified character encoding. | |||
The JSON serialization for these target attributes MUST be as | The JSON serialization for these target attributes MUST be as | |||
follows: | follows: | |||
* An internationalized target attribute is represented as a member | * An internationalized target attribute is represented as a member | |||
of the link context object with the same name (including the *) as | of the link context object with the same name (including the "*") | |||
the attribute. | as the attribute. | |||
* The character encoding information as prescribed by [RFC8187] is | * The character encoding information as prescribed by [RFC8187] is | |||
not preserved; instead, the content of the internationalized | not preserved; instead, the content of the internationalized | |||
attribute is represented as a JSON string. | attribute is represented as a JSON string. | |||
* The value of the internationalized target attribute is an array | * The value of the internationalized target attribute is an array | |||
that contains one or more JSON objects. The name of one member of | that contains one or more JSON objects. The name of one member of | |||
such JSON object is "value" and its value is the actual content | such JSON objects is "value", and its value is the actual content | |||
(in its unescaped version) of the internationalized target | (in its unescaped version) of the internationalized target | |||
attribute, i.e. the value of the attribute from which the encoding | attribute, i.e., the value of the attribute from which the | |||
and language information are removed. The name of another, | encoding and language information are removed. The name of | |||
optional, member of such JSON object is "language" and its value | another, optional member of such JSON objects is "language", and | |||
is the language tag [RFC5646] for the language in which the | its value is the language tag [RFC5646] for the language in which | |||
attribute content is conveyed. | the attribute content is conveyed. | |||
The following example illustrates how the "title*" target attribute | The following example illustrates how the "title*" target attribute | |||
defined by Section 3.4.1 of [RFC8288] is represented in a link target | as defined by Section 3.4.1 of [RFC8288] is represented in a link | |||
object. | target object. | |||
{ "linkset": | { "linkset": | |||
[ | [ | |||
{ "anchor": "https://example.net/bar", | { "anchor": "https://example.net/bar", | |||
"next": [ | "next": [ | |||
{ "href": "https://example.com/foo", | { "href": "https://example.com/foo", | |||
"type": "text/html", | "type": "text/html", | |||
"hreflang": [ "en" , "de" ], | "hreflang": [ "en" , "de" ], | |||
"title": "Next chapter", | "title": "Next chapter", | |||
"title*": [ { "value": "nächstes Kapitel" , | "title*": [ { "value": "nächstes Kapitel" , | |||
"language" : "de" } ] | "language" : "de" } ] | |||
} | } | |||
] | ] | |||
} | } | |||
] | ] | |||
} | } | |||
Figure 5 | Figure 5: Linkset with "title" and "title*" target attributes | |||
The above example assumes that the German title contains an umlaut | The above example assumes that the German title contains an umlaut | |||
character (in the original syntax it would be encoded as title*=UTF- | character (in the original syntax, it would be encoded as title*=UTF- | |||
8'de'n%c3%a4chstes%20Kapitel), which gets encoded in its unescaped | 8'de'n%c3%a4chstes%20Kapitel), which gets encoded in its unescaped | |||
form in the JSON representation. Implementations MUST properly | form in the JSON representation. Implementations MUST properly | |||
decode/encode internationalized target attributes that follow the | decode/encode internationalized target attributes that follow the | |||
model of [RFC8187] when transcoding between the "application/linkset" | model of [RFC8187] when transcoding between the "application/linkset" | |||
and the "application/linkset+json" formats. | format and the "application/linkset+json" format. | |||
4.2.4.3. Extension Target Attributes | 4.2.4.3. Extension Target Attributes | |||
Extension target attributes are attributes that are not defined by | Extension target attributes (e.g., as listed in Section 4.2.4.1) are | |||
Section 3.4.1 of [RFC8288] (as listed in Section 4.2.4.1), but are | attributes that are not defined by Section 3.4.1 of [RFC8288] but are | |||
nevertheless used to qualify links. They can be defined by | nevertheless used to qualify links. They can be defined by | |||
communities in any way deemed necessary, and it is up to them to make | communities in any way deemed necessary, and it is up to them to make | |||
sure their usage is understood by target applications. However, | sure their usage is understood by target applications. However, | |||
lacking standardization, there is no interoperable understanding of | lacking standardization, there is no interoperable understanding of | |||
these extension attributes. One important consequence is that their | these extension attributes. One important consequence is that their | |||
cardinality is unknown to generic applications. Therefore, in the | cardinality is unknown to generic applications. Therefore, in the | |||
JSON serialization, all extension target attributes are treated as | JSON serialization, all extension target attributes are treated as | |||
repeatable. | repeatable. | |||
The JSON serialization for these target attributes MUST be as | The JSON serialization for these target attributes MUST be as | |||
follows: | follows: | |||
* An extension target attribute is represented as a member of the | * An extension target attribute is represented as a member of the | |||
link target object with the same name as the attribute, including | link target object with the same name as the attribute, including | |||
the * if applicable. | the "*" if applicable. | |||
* The value of an extension attribute MUST be represented by an | * The value of an extension attribute MUST be represented by an | |||
array, even if there only is one value to be represented. | array, even if there is only one value to be represented. | |||
* If the extension target attribute does not have a name with a | * If the extension target attribute does not have a name with a | |||
trailing asterisk, then each value in that array MUST be a JSON | trailing asterisk, then each value in that array MUST be a JSON | |||
string that represents one value of the attribute. | string that represents one value of the attribute. | |||
* If the extension attribute has a name with a trailing asterisk (it | * If the extension attribute has a name with a trailing asterisk (it | |||
follows the content model of [RFC8187]), then each value in that | follows the content model of [RFC8187]), then each value in that | |||
array MUST be a JSON object. The value of each such JSON object | array MUST be a JSON object. The value of each such JSON object | |||
MUST be structured as described in Section 4.2.4.2. | MUST be structured as described in Section 4.2.4.2. | |||
The example shows a link target object with three extension target | The following example shows a link target object with three extension | |||
attributes. The value for each extension target attribute is an | target attributes. The value for each extension target attribute is | |||
array. The two first are regular extension target attributes, with | an array. The first two are regular extension target attributes, | |||
the first one ("foo") having only one value and the second one | with the first one ("foo") having only one value and the second one | |||
("bar") having two. The last extension target attribute ("baz*") | ("bar") having two. The last extension target attribute ("baz*") | |||
follows the naming rule of [RFC8187] and therefore is encoded | follows the naming rule of [RFC8187] and therefore is encoded | |||
according to the serialization described in Section 4.2.4.2. | according to the serialization described in Section 4.2.4.2. | |||
{ "linkset": | { "linkset": | |||
[ | [ | |||
{ "anchor": "https://example.net/bar", | { "anchor": "https://example.net/bar", | |||
"next": [ | "next": [ | |||
{ "href": "https://example.com/foo", | { "href": "https://example.com/foo", | |||
"type": "text/html", | "type": "text/html", | |||
"foo": [ "foovalue" ], | "foo": [ "foovalue" ], | |||
"bar": [ "barone", "bartwo" ], | "bar": [ "barone", "bartwo" ], | |||
"baz*": [ { "value": "bazvalue" , | "baz*": [ { "value": "bazvalue" , | |||
"language" : "en" } ] | "language" : "en" } ] | |||
} | } | |||
] | ] | |||
} | } | |||
] | ] | |||
} | } | |||
Figure 6 | ||||
Figure 6: Linkset with extension target attributes | ||||
4.2.5. JSON Extensibility | 4.2.5. JSON Extensibility | |||
The Web linking model ([RFC8288]) provides for the use of extension | The Web Linking model [RFC8288] provides for the use of extension | |||
target attributes as discussed in Section 4.2.4.3. The use of other | target attributes as discussed in Section 4.2.4.3. The use of other | |||
forms of extensions is NOT RECOMMENDED. Limiting the JSON format in | forms of extensions is NOT RECOMMENDED. Limiting the JSON format in | |||
this way allows to unambiguously round trip between links provided in | this way allows unambiguous round trips between links provided in the | |||
the HTTP "Link" header field, sets of links serialized according to | HTTP "Link" header field, sets of links serialized according to the | |||
the "application/linkset" format, and sets of links serialized | "application/linkset" format, and sets of links serialized according | |||
according to the "application/linkset+json" format. | to the "application/linkset+json" format. | |||
Cases may exist in which the use of extensions other than those of | Cases may exist in which the use of extensions other than those | |||
Section 4.2.4.3 may be useful. For example, when a link set | discussed in Section 4.2.4.3 may be useful -- for example, when a | |||
publisher needs to include descriptive or technical metadata for | link set publisher needs to include descriptive or technical metadata | |||
internal consumption. In case such extensions are used they MUST NOT | for internal consumption. If such extensions are used, they MUST NOT | |||
change the semantics of the JSON members defined in this | change the semantics of the JSON members defined in this | |||
specification. Agents that consume JSON linkset documents can safely | specification. Agents that consume JSON linkset documents can safely | |||
ignore such extensions. | ignore such extensions. | |||
5. The "profile" parameter for media types to Represent Sets of Links | 5. The "profile" Parameter for Media Types to Represent Sets of Links | |||
As a means to convey specific constraints or conventions (as per | As a means to convey specific constraints or conventions (as per | |||
[RFC6906]) that apply to a link set document, the "profile" parameter | [RFC6906]) that apply to a link set document, the "profile" parameter | |||
MAY be used in conjunction with the media types "application/linkset" | MAY be used in conjunction with the media types "application/linkset" | |||
and "application/linkset+json" detailed in Section 4.1 and | and "application/linkset+json" as detailed in Sections 4.1 and 4.2, | |||
Section 4.2, respectively. For example, the parameter could be used | respectively. For example, the parameter could be used to indicate | |||
to indicate that a link set uses a specific, limited set of link | that a link set uses a specific, limited set of link relation types. | |||
relation types. | ||||
The value of the "profile" parameter MUST be a non-empty list of | The value of the "profile" parameter MUST be a non-empty list of | |||
space-separated URIs, each of which identifies specific constraints | space-separated URIs, each of which identifies specific constraints | |||
or conventions that apply to the link set document. When providing | or conventions that apply to the link set document. When providing | |||
multiple profile URIs, care should be taken that the corresponding | multiple profile URIs, care should be taken that the corresponding | |||
profiles are not conflicting. Profile URIs MAY be registered in the | profiles are not conflicting. Profile URIs MAY be registered in the | |||
IANA Profile URI Registry in the manner specified by [RFC7284]. | IANA's "Profile URIs" registry in the manner specified by [RFC7284]. | |||
The presence of a "profile" parameter in conjunction with the | The presence of a "profile" parameter in conjunction with the | |||
"application/linkset" and "application/linkset+json" media types does | "application/linkset" and "application/linkset+json" media types does | |||
not change the semantics of a link set. As such, clients with and | not change the semantics of a link set. As such, clients with and | |||
without knowledge of profile URIs can use the same representation. | without knowledge of profile URIs can use the same representation. | |||
Section 7.4.2 shows an example of using the "profile" parameter in | Section 7.4.2 shows an example of using the "profile" parameter in | |||
conjunction with the "application/linkset+json" media type. | conjunction with the "application/linkset+json" media type. | |||
6. The "linkset" Relation Type for Linking to a Set of Links | 6. The "linkset" Relation Type for Linking to a Set of Links | |||
skipping to change at page 16, line 24 ¶ | skipping to change at line 712 ¶ | |||
A resource MAY provide more than one link with a "linkset" relation | A resource MAY provide more than one link with a "linkset" relation | |||
type. Multiple such links can refer to the same set of links | type. Multiple such links can refer to the same set of links | |||
expressed using different media types, or to different sets of links, | expressed using different media types, or to different sets of links, | |||
potentially provided by different third-party services. | potentially provided by different third-party services. | |||
The set of links provided by the resource that is the target of a | The set of links provided by the resource that is the target of a | |||
"linkset" link may contain links in which the resource that is the | "linkset" link may contain links in which the resource that is the | |||
context of the "linkset" link does not participate. User agents MUST | context of the "linkset" link does not participate. User agents MUST | |||
process each link in the link set independently, including processing | process each link in the link set independently, including processing | |||
of link context and link target, and MAY ignore links from the link | of the link context and link target, and MAY ignore links from the | |||
set in which the context of the "linkset" link does not participate. | link set in which the context of the "linkset" link does not | |||
participate. | ||||
A user agent that follows a "linkset" link and obtains links for | A user agent that follows a "linkset" link and obtains links for | |||
which anchors and targets are expressed as relative references (as | which anchors and targets are expressed as relative references (as | |||
per Section 4.1 of [RFC3986]) MUST determine what the context is for | per Section 4.1 of [RFC3986]) MUST determine what the context is for | |||
these links; it SHOULD ignore links for which it is unable to | these links; it SHOULD ignore links for which it is unable to | |||
unambiguously make that determination. | unambiguously make that determination. | |||
As a means to convey specific constraints or conventions (as per | As a means to convey specific constraints or conventions (as per | |||
[RFC6906]) that apply to a link set document, the "profile" attribute | [RFC6906]) that apply to a link set document, the "profile" attribute | |||
MAY be used in conjunction with the "linkset" link relation type. | MAY be used in conjunction with the "linkset" link relation type. | |||
For example, the attribute could be used to indicate that a link set | For example, the attribute could be used to indicate that a link set | |||
uses a specific, limited set of link relation types. The value of | uses a specific, limited set of link relation types. The value of | |||
the "profile" attribute MUST be a non-empty list of space-separated | the "profile" attribute MUST be a non-empty list of space-separated | |||
URIs, each of which identifies specific constraints or conventions | URIs, each of which identifies specific constraints or conventions | |||
that apply to the link set document. Profile URIs MAY be registered | that apply to the link set document. Profile URIs MAY be registered | |||
in the IANA Profile URI Registry in the manner specified by | in the IANA's "Profile URIs" registry in the manner specified by | |||
[RFC7284]. Section 7.4.1 shows an example of using the "profile" | [RFC7284]. Section 7.4.1 shows an example of using the "profile" | |||
attribute on a link with the "linkset" relation type, making both the | attribute on a link with the "linkset" relation type, making both the | |||
link set and the profile(s) to which it complies discoverable. | link set and the profile(s) to which it complies discoverable. | |||
7. Examples | 7. Examples | |||
Section 7.1 and Section 7.2 show examples whereby a set of links is | Sections 7.1 and 7.2 show examples whereby a set of links is provided | |||
provided as "application/linkset" and "application/linkset+json" | as "application/linkset" and "application/linkset+json" documents, | |||
documents, respectively. Section 7.3 illustrates the use of the | respectively. Section 7.3 illustrates the use of the "linkset" link | |||
"linkset" link relation type to support discovery of sets of links | relation type to support the discovery of sets of links, and | |||
and Section 7.4 shows how to convey profile information pertaining to | Section 7.4 shows how to convey profile information pertaining to a | |||
a link set. | link set. | |||
7.1. Set of Links Provided as application/linkset | 7.1. Set of Links Provided as "application/linkset" | |||
Figure 7 shows a client issuing an HTTP GET request against resource | Figure 7 shows a client issuing an HTTP GET request against resource | |||
<https://example.org/links/resource1>. | <https://example.org/links/resource1>. | |||
GET /links/resource1 HTTP/1.1 | GET /links/resource1 HTTP/1.1 | |||
Host: example.org | Host: example.org | |||
Figure 7: Client HTTP GET request | Figure 7: Client HTTP GET request | |||
Figure 8 shows the response to the GET request of Figure 7. The | Figure 8 shows the response to the GET request of Figure 7. The | |||
response contains a Content-Type header field specifying that the | response contains a "Content-Type" header field specifying that the | |||
media type of the response is "application/linkset". A set of links, | media type of the response is "application/linkset". A set of links, | |||
revealing authorship and versioning related to resource | revealing authorship and versioning related to resource | |||
<https://example.org/resource1>, is provided in the response body. | <https://example.org/resource1>, is provided in the response body. | |||
The HTTP "Link" header field indicates the availability of an | The HTTP "Link" header field indicates the availability of an | |||
alternate representation of the set of links using media type | alternate representation of the set of links using media type | |||
"application/linkset+json". | "application/linkset+json". | |||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
Date: Mon, 12 Aug 2019 10:35:51 GMT | Date: Mon, 12 Aug 2019 10:35:51 GMT | |||
Server: Apache-Coyote/1.1 | Server: Apache-Coyote/1.1 | |||
skipping to change at page 18, line 46 ¶ | skipping to change at line 804 ¶ | |||
; rel="memento" | ; rel="memento" | |||
; type="text/html" | ; type="text/html" | |||
; datetime="Sun, 21 Jul 2019 12:22:04 GMT" | ; datetime="Sun, 21 Jul 2019 12:22:04 GMT" | |||
; anchor="https://example.org/resource1", | ; anchor="https://example.org/resource1", | |||
<https://authors.example.net/alice> | <https://authors.example.net/alice> | |||
; rel="author" | ; rel="author" | |||
; anchor="https://example.org/resource1#comment=1" | ; anchor="https://example.org/resource1#comment=1" | |||
Figure 8: Response to HTTP GET includes a set of links | Figure 8: Response to HTTP GET includes a set of links | |||
7.2. Set of Links Provided as application/linkset+json | 7.2. Set of Links Provided as "application/linkset+json" | |||
Figure 9 shows the client issuing an HTTP GET request against | Figure 9 shows the client issuing an HTTP GET request against | |||
<https://example.org/links/resource1>. In the request, the client | <https://example.org/links/resource1>. In the request, the client | |||
uses an "Accept" header field to indicate it prefers a response in | uses an "Accept" header field to indicate that it prefers a response | |||
the "application/linkset+json" format. | in the "application/linkset+json" format. | |||
GET links/resource1 HTTP/1.1 | GET links/resource1 HTTP/1.1 | |||
Host: example.org | Host: example.org | |||
Accept: application/linkset+json | Accept: application/linkset+json | |||
Figure 9: Client HTTP GET request expressing preference for | Figure 9: Client HTTP GET request expressing preference for an | |||
"application/ linkset+json" response | "application/linkset+json" response | |||
Figure 10 shows the response to the HTTP GET request of Figure 9. | Figure 10 shows the response to the HTTP GET request of Figure 9. | |||
The set of links is serialized according to the media type | The set of links is serialized according to the media type | |||
"application/linkset+json". | "application/linkset+json". | |||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
Date: Mon, 12 Aug 2019 10:46:22 GMT | Date: Mon, 12 Aug 2019 10:46:22 GMT | |||
Server: Apache-Coyote/1.1 | Server: Apache-Coyote/1.1 | |||
Content-Type: application/linkset+json | Content-Type: application/linkset+json | |||
Link: <https://example.org/links/resource1> | Link: <https://example.org/links/resource1> | |||
skipping to change at page 20, line 4 ¶ | skipping to change at line 859 ¶ | |||
"latest-version": [ | "latest-version": [ | |||
{ "href": "https://example.org/resource1?version=3", | { "href": "https://example.org/resource1?version=3", | |||
"type": "text/html" | "type": "text/html" | |||
} | } | |||
] | ] | |||
}, | }, | |||
{ "anchor": "https://example.org/resource1?version=3", | { "anchor": "https://example.org/resource1?version=3", | |||
"predecessor-version": [ | "predecessor-version": [ | |||
{ "href": "https://example.org/resource1?version=2", | { "href": "https://example.org/resource1?version=2", | |||
"type": "text/html" | "type": "text/html" | |||
} | } | |||
] | ] | |||
}, | }, | |||
{ "anchor": "https://example.org/resource1?version=2", | { "anchor": "https://example.org/resource1?version=2", | |||
"predecessor-version": [ | "predecessor-version": [ | |||
{ "href": "https://example.org/resource1?version=1", | { "href": "https://example.org/resource1?version=1", | |||
"type": "text/html" | "type": "text/html" | |||
} | } | |||
] | ] | |||
}, | }, | |||
{ "anchor": "https://example.org/resource1#comment=1", | { "anchor": "https://example.org/resource1#comment=1", | |||
"author": [ | "author": [ | |||
{ "href": "https://authors.example.net/alice"} | { "href": "https://authors.example.net/alice"} | |||
] | ] | |||
} | } | |||
] | ] | |||
} | } | |||
Figure 10: Response to the client's request for the set of links | Figure 10: Response to the client's request for the linkset | |||
7.3. Discovering a Link Set via the "linkset" Link Relation Type | 7.3. Discovering a Link Set via the "linkset" Link Relation Type | |||
Figure 11 shows a client issuing an HTTP HEAD request against | Figure 11 shows a client issuing an HTTP HEAD request against | |||
resource <https://example.org/resource1>. | resource <https://example.org/resource1>. | |||
HEAD resource1 HTTP/1.1 | HEAD resource1 HTTP/1.1 | |||
Host: example.org | Host: example.org | |||
Figure 11: Client HTTP HEAD request | Figure 11: Client HTTP HEAD request | |||
skipping to change at page 21, line 25 ¶ | skipping to change at line 926 ¶ | |||
Figure 13 shows a client issuing an HTTP HEAD request against trade | Figure 13 shows a client issuing an HTTP HEAD request against trade | |||
item 09506000134352 at <https://id.gs1.org/01/9506000134352>. | item 09506000134352 at <https://id.gs1.org/01/9506000134352>. | |||
HEAD /01/9506000134352 HTTP/1.1 | HEAD /01/9506000134352 HTTP/1.1 | |||
Host: id.gs1.org | Host: id.gs1.org | |||
Figure 13: Client HTTP HEAD request | Figure 13: Client HTTP HEAD request | |||
Figure 14 shows the server's response to the request of Figure 13, | Figure 14 shows the server's response to the request of Figure 13, | |||
including a "linkset" link with a "profile" attribute that has the | including a "linkset" link with a "profile" attribute that has the | |||
Profile URI <https://www.gs1.org/voc/?show=linktypes> as its value. | profile URI <https://www.gs1.org/voc/?show=linktypes> as its value. | |||
Dereferencing that URI yields a profile document that lists all the | Dereferencing that URI yields a profile document that lists all the | |||
link relation types that a client can expect when requesting the link | link relation types that a client can expect when requesting the link | |||
set made discoverable by the "linkset" link. The link relation types | set made discoverable by the "linkset" link. The link relation types | |||
are presented in abbreviated form, e.g. <gs1:activityIdeas>, whereas | are presented in abbreviated form, e.g., <gs1:activityIdeas>, whereas | |||
the actual link relation type URIs are available as hyperlinks on the | the actual link relation type URIs are available as hyperlinks on the | |||
abbreviations, e.g. <https://www.gs1.org/voc/activityIdeas>. For | abbreviations, e.g., <https://www.gs1.org/voc/activityIdeas>. For | |||
posterity that profile document was saved in the Internet Archive at | posterity, that profile document was saved in the Internet Archive at | |||
<https://web.archive.org/web/20210927160406/https://www.gs1.org/ | <https://web.archive.org/web/20210927160406/https://www.gs1.org/ | |||
voc/?show=linktypes> on 27 September 2021. | voc/?show=linktypes> on 27 September 2021. | |||
HTTP/1.1 307 Temporary Redirect | HTTP/1.1 307 Temporary Redirect | |||
Date: Mon, 27 Sep 2021 16:03:07 GMT | Date: Mon, 27 Sep 2021 16:03:07 GMT | |||
Server: nginx | Server: nginx | |||
Link: https://id.gs1.org/01/9506000134352?linkType=all | Link: <https://id.gs1.org/01/9506000134352?linkType=all> | |||
; rel="linkset" | ; rel="linkset" | |||
; type="application/linkset+json" | ; type="application/linkset+json" | |||
; profile="https://www.gs1.org/voc/?show=linktypes" | ; profile="https://www.gs1.org/voc/?show=linktypes" | |||
Location: https://example.com/risotto-rice-with-mushrooms/ | Location: https://example.com/risotto-rice-with-mushrooms/ | |||
Figure 14: Response to the client's HEAD request including a | Figure 14: Response to the client's HEAD request, including a | |||
"profile" attribute for the "linkset" link | "profile" attribute for the "linkset" link | |||
7.4.2. Using a "profile" Parameter with a Link Set Media Type | 7.4.2. Using a "profile" Parameter with a Link Set Media Type | |||
Figure 15 shows a client issuing an HTTP HEAD request against the | Figure 15 shows a client issuing an HTTP HEAD request against the | |||
link set <https://id.gs1.org/01/9506000134352?linkType=all> that was | link set <https://id.gs1.org/01/9506000134352?linkType=all> that was | |||
discovered through the HTTP interactions shown in Section 7.4.1. | discovered through the HTTP interactions shown in Section 7.4.1. | |||
HEAD /01/9506000134352?linkType=all HTTP/1.1 | HEAD /01/9506000134352?linkType=all HTTP/1.1 | |||
Host: id.gs1.org | Host: id.gs1.org | |||
Figure 15: Client HTTP HEAD request | Figure 15: Client HTTP HEAD request | |||
Figure 16 shows the server's response to the request of Figure 15. | Figure 16 shows the server's response to the request of Figure 15. | |||
Note the "profile" parameter for the application/linkset+json media | Note the "profile" parameter for the "application/linkset+json" media | |||
type, which has as value the same Profile URI <https://www.gs1.org/ | type, which has as its value the same profile URI | |||
voc/?show=linktypes> as was used in <xref target="Response_pr_at"/>. | <https://www.gs1.org/voc/?show=linktypes> as was used in Figure 14. | |||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
Date: Mon, 27 Sep 2021 16:03:33 GMT | Date: Mon, 27 Sep 2021 16:03:33 GMT | |||
Server: nginx | Server: nginx | |||
Content-Type: application/linkset+json; | Content-Type: application/linkset+json; | |||
profile="https://www.gs1.org/voc/?show=linktypes" | profile="https://www.gs1.org/voc/?show=linktypes" | |||
Content-Length: 396 | Content-Length: 396 | |||
Figure 16: Response to the client's HEAD request including a | Figure 16: Response to the client's HEAD request, including a | |||
"profile" parameter for the "application/linkset+json" media type | "profile" parameter for the "application/linkset+json" media type | |||
7.4.3. Using a Link with a "profile" Link Relation Type | 7.4.3. Using a Link with a "profile" Link Relation Type | |||
Note that the response Figure 16 from the link set resource is | Note that the response shown in Figure 16 from the link set resource | |||
equivalent to the response shown in Figure 17, which leverages the | is equivalent to the response shown in Figure 17, which leverages the | |||
"profile" link relation type defined in [RFC6906]. | "profile" link relation type defined in [RFC6906]. | |||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
Date: Mon, 27 Sep 2021 16:03:33 GMT | Date: Mon, 27 Sep 2021 16:03:33 GMT | |||
Server: nginx | Server: nginx | |||
Content-Type: application/linkset+json | Content-Type: application/linkset+json | |||
Link: https://www.gs1.org/voc/?show=linktypes; rel="profile" | Link: <https://www.gs1.org/voc/?show=linktypes>; rel="profile" | |||
Content-Length: 396 | Content-Length: 396 | |||
Figure 17: Response to the client's HEAD request including a | Figure 17: Response to the client's HEAD request, including a | |||
"profile" link | "profile" link | |||
A link with a "profile" link relation type as shown in Figure 17 can | A link with a "profile" link relation type as shown in Figure 17 can | |||
also be conveyed in the link set document itself. This is | also be conveyed in the link set document itself. This is | |||
illustrated by Figure 18. Following the recommendation that all | illustrated by Figure 18. Following the recommendation that all | |||
links in a link set document should have an explicit anchor, such a | links in a link set document should have an explicit anchor, such a | |||
link has the URI of the link set itself as anchor and the Profile URI | link has the URI of the link set itself as the anchor and the profile | |||
as target. Multiple Profile URIs are handled by using multiple | URI as the target. Multiple profile URIs are handled by using | |||
"href" members. | multiple "href" members. | |||
{ "linkset": | { "linkset": | |||
[ | [ | |||
{ "anchor": "https://id.gs1.org/01/9506000134352?linkType=all", | { "anchor": "https://id.gs1.org/01/9506000134352?linkType=all", | |||
"profile": [ | "profile": [ | |||
{"href": "https://www.gs1.org/voc/?show=linktypes"} | {"href": "https://www.gs1.org/voc/?show=linktypes"} | |||
] | ] | |||
}, | }, | |||
{ "anchor": "https://id.gs1.org/01/9506000134352", | { "anchor": "https://id.gs1.org/01/9506000134352", | |||
"https://gs1.org/voc/whatsInTheBox": [ | "https://gs1.org/voc/whatsInTheBox": [ | |||
{"href": "https://example.com/en/packContents/GB"} | {"href": "https://example.com/en/packContents/GB"} | |||
] | ] | |||
} | } | |||
] | ] | |||
} | } | |||
Figure 18: A Link Set that declares the profile it complies with | Figure 18: A linkset that declares the profile it complies with, | |||
using a "profile" link | using a "profile" link | |||
8. IANA Considerations | 8. IANA Considerations | |||
8.1. Link Relation Type: linkset | 8.1. Link Relation Type: linkset | |||
The link relation type below should be registered by IANA in the Link | The link relation type below has been registered by IANA in the "Link | |||
Relation Type Registry as per Section 4.2 of Web Linking [RFC8288]: | Relation Types" registry as per Section 4.2 of [RFC8288]: | |||
Relation Name: linkset | Relation Name: linkset | |||
Description: The link target of a link with the "linkset" relation | Description: The link target of a link with the "linkset" relation | |||
type provides a set of links, including links in which the link | type provides a set of links, including links in which the link | |||
context of the link participates. | context of the link participates. | |||
Reference: [[ This document ]] | Reference: RFC 9264 | |||
8.2. Media Type: application/linkset | 8.2. Media Type: application/linkset | |||
The Internet media type application/linkset for a linkset encoded as | The Internet media type "application/linkset" for a linkset encoded | |||
described in Section 4.1 should be registered by IANA in the Media | as described in Section 4.1 has been registered by IANA in the "Media | |||
Type Registry as per [RFC6838]. | Types" registry as per [RFC6838]. | |||
Type name: application | ||||
Subtype name: linkset | Type name: application | |||
Required parameters: N/A | Subtype name: linkset | |||
Optional parameters: profile | Required parameters: N/A | |||
Encoding considerations: Linksets are encoded according to the | ||||
definition of [RFC8288]. The encoding of [RFC8288] is based on | ||||
the general encoding rules of [I-D.ietf-httpbis-semantics], with | ||||
the addition of allowing indicating character encoding and | ||||
language for specific parameters as defined by [RFC8187]. | ||||
Security considerations: The security considerations of [[ This | Optional parameters: profile | |||
document ]] apply. | ||||
Interoperability considerations: N/A | Encoding considerations: Linksets are encoded according to the | |||
definitions provided in [RFC8288]. The encoding discussed in | ||||
[RFC8288] is based on the general encoding rules specified by HTTP | ||||
[RFC9110] and allows specific parameters to be extended by the | ||||
indication of character encoding and language as defined by | ||||
[RFC8187]. | ||||
Published specification: [[ This document ]] | Security considerations: The security considerations of RFC 9264 | |||
apply. | ||||
Applications that use this media type: This media type is not | Interoperability considerations: N/A | |||
specific to any application, as it can be used by any application | ||||
that wants to interchange web links. | ||||
Additional information: | Published specification: RFC 9264 | |||
Magic number(s): N/A | Applications that use this media type: This media type is not | |||
specific to any application, as it can be used by any application | ||||
that wants to interchange Web Links. | ||||
File extension(s): This media type does not propose a specific | Additional information: | |||
Magic number(s): N/A | ||||
File extension(s): This media type does not propose a specific | ||||
extension. | extension. | |||
Macintosh file type code(s): TEXT | ||||
Macintosh file type code(s): TEXT | Person & email address to contact for further information: Erik | |||
Person & email address to contact for further information: Erik | ||||
Wilde <erik.wilde@dret.net> | Wilde <erik.wilde@dret.net> | |||
Intended usage: COMMON | Intended usage: COMMON | |||
Restrictions on usage: none | Restrictions on usage: none | |||
Author: Erik Wilde <erik.wilde@dret.net> | Author: Erik Wilde <erik.wilde@dret.net> | |||
Change controller: IETF | Change controller: IETF | |||
8.3. Media Type: application/linkset+json | 8.3. Media Type: application/linkset+json | |||
The Internet media type application/linkset+json for a linkset | The Internet media type "application/linkset+json" for a linkset | |||
encoded as described in Section 4.2 should be registered by IANA in | encoded as described in Section 4.2 has been registered by IANA in | |||
the Media Type Registry as per [RFC6838]. | the "Media Types" registry as per [RFC6838]. | |||
Type name: application | ||||
Subtype name: linkset+json | Type name: application | |||
Required parameters: N/A | Subtype name: linkset+json | |||
Optional parameters: profile | ||||
Encoding considerations: The encoding considerations of [RFC8259] | Required parameters: N/A | |||
apply | ||||
Security considerations: The security considerations of [[ This | Optional parameters: profile | |||
document ]] apply. | ||||
Interoperability considerations: The interoperability | Encoding considerations: The encoding considerations of [RFC8259] | |||
considerations of [RFC8259] apply. | apply. | |||
Published specification: [[ This document ]] | Security considerations: The security considerations of RFC 9264 | |||
apply. | ||||
Applications that use this media type: This media type is not | Interoperability considerations: The interoperability considerations | |||
specific to any application, as it can be used by any application | of [RFC8259] apply. | |||
that wants to interchange web links. | ||||
Additional information: | Published specification: RFC 9264 | |||
Magic number(s): N/A | Applications that use this media type: This media type is not | |||
specific to any application, as it can be used by any application | ||||
that wants to interchange Web Links. | ||||
File extension(s): JSON documents often use ".json" as the file | Additional information: | |||
Magic number(s): N/A | ||||
File extension(s): JSON documents often use ".json" as the file | ||||
extension, and this media type does not propose a specific | extension, and this media type does not propose a specific | |||
extension other than this generic one. | extension other than this generic one. | |||
Macintosh file type code(s): TEXT | ||||
Macintosh file type code(s): TEXT | Person & email address to contact for further information: Erik | |||
Person & email address to contact for further information: Erik | ||||
Wilde <erik.wilde@dret.net> | Wilde <erik.wilde@dret.net> | |||
Intended usage: COMMON | Intended usage: COMMON | |||
Restrictions on usage: none | Restrictions on usage: none | |||
Author: Erik Wilde <erik.wilde@dret.net> | Author: Erik Wilde <erik.wilde@dret.net> | |||
Change controller: IETF | Change controller: IETF | |||
9. Security Considerations | 9. Security Considerations | |||
The security considerations of Section 7 of [RFC3986] apply, as well | The security considerations of Section 7 of [RFC3986] apply, as well | |||
as those of Web Linking [RFC8288] as long as the latter are not | as those of Web Linking [RFC8288] as long as the latter are not | |||
specifically discussing the risks of exposing information in HTTP | specifically discussing the risks of exposing information in HTTP | |||
header fields. | header fields. | |||
In general, links may cause information leakage when they expose | In general, links may cause information leakage when they expose | |||
information (such as URIs) that can be sensitive or private. Links | information (such as URIs) that can be sensitive or private. Links | |||
may expose "hidden URIs" that are not supposed to be openly shared, | may expose "hidden URIs" that are not supposed to be openly shared | |||
and may not be sufficiently protected. Ideally, none of the URIs | and that may not be sufficiently protected. Ideally, none of the | |||
exposed in links should be supposed to be "hidden"; instead, if these | URIs exposed in links should be supposed to be "hidden"; instead, if | |||
URIs are supposed to be limited to certain users, then technical | these URIs are supposed to be limited to certain users, then | |||
measures should be put in place so that accidentally exposing them | technical measures should be put in place so that accidentally | |||
does not cause any harm. | exposing them does not cause any harm. | |||
For the specific mechanisms defined in this specification, two | For the specific mechanisms defined in this specification, two | |||
security considerations should be taken into account: | security considerations should be taken into account: | |||
* The Web Linking model always has an "implicit context", which is | * The Web Linking model always has an "implicit context", which is | |||
the resource of the HTTP interaction. This original context can | the resource of the HTTP interaction. This original context can | |||
be lost or can change when self-contained link representations are | be lost or can change when self-contained link representations are | |||
moved. Changing the context can change the interpretation of | moved. Changing the context can change the interpretation of | |||
links when they have no explicit anchor, or when they use relative | links when they have no explicit anchor or when they use relative | |||
URIs. Applications may choose to ignore links that have no | URIs. Applications may choose to ignore links that have no | |||
explicit anchor or that use relative URIs when these are exchanged | explicit anchor or that use relative URIs when these are exchanged | |||
in stand-alone resources. | in standalone resources. | |||
* The model introduced in this specification supports "3rd party | * The model introduced in this specification supports "third-party | |||
links", where one party can provide links that have another | links", where one party can provide links that have another | |||
party's resource as an anchor. Depending on the link semantics | party's resource as an anchor. Depending on the link semantics | |||
and the application context, it is important to verify that there | and the application context, it is important to verify that there | |||
is sufficient trust in that 3rd party to allow it to provide these | is sufficient trust in that third party to allow it to provide | |||
links. Applications may choose to treat 3rd party links | these links. Applications may choose to treat third-party links | |||
differently than cases where a resource and the links for that | differently than cases where a resource and the links for that | |||
resource are provided by the same party. | resource are provided by the same party. | |||
10. Normative References | 10. References | |||
10.1. Normative References | ||||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | |||
Resource Identifier (URI): Generic Syntax", STD 66, | Resource Identifier (URI): Generic Syntax", STD 66, | |||
RFC 3986, DOI 10.17487/RFC3986, January 2005, | RFC 3986, DOI 10.17487/RFC3986, January 2005, | |||
<https://www.rfc-editor.org/info/rfc3986>. | <https://www.rfc-editor.org/info/rfc3986>. | |||
[RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | |||
Specifications: ABNF", STD 68, RFC 5234, | Specifications: ABNF", STD 68, RFC 5234, | |||
DOI 10.17487/RFC5234, January 2008, | DOI 10.17487/RFC5234, January 2008, | |||
<https://www.rfc-editor.org/info/rfc5234>. | <https://www.rfc-editor.org/info/rfc5234>. | |||
[RFC5646] Phillips, A., Ed. and M. Davis, Ed., "Tags for Identifying | [RFC5646] Phillips, A., Ed. and M. Davis, Ed., "Tags for Identifying | |||
Languages", BCP 47, RFC 5646, DOI 10.17487/RFC5646, | Languages", BCP 47, RFC 5646, DOI 10.17487/RFC5646, | |||
September 2009, <https://www.rfc-editor.org/info/rfc5646>. | September 2009, <https://www.rfc-editor.org/info/rfc5646>. | |||
[W3C.REC-json-ld-20140116] | ||||
Sporny, M., Kellogg, G., and M. Lanthaler, "JSON-LD 1.0", | ||||
World Wide Web Consortium Recommendation REC-json-ld- | ||||
20140116, 16 January 2014, | ||||
<https://www.w3.org/TR/2014/REC-json-ld-20140116>. | ||||
[RFC6838] Freed, N., Klensin, J., and T. Hansen, "Media Type | [RFC6838] Freed, N., Klensin, J., and T. Hansen, "Media Type | |||
Specifications and Registration Procedures", BCP 13, | Specifications and Registration Procedures", BCP 13, | |||
RFC 6838, DOI 10.17487/RFC6838, January 2013, | RFC 6838, DOI 10.17487/RFC6838, January 2013, | |||
<https://www.rfc-editor.org/info/rfc6838>. | <https://www.rfc-editor.org/info/rfc6838>. | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
[RFC8187] Reschke, J., "Indicating Character Encoding and Language | [RFC8187] Reschke, J., "Indicating Character Encoding and Language | |||
skipping to change at page 27, line 34 ¶ | skipping to change at line 1211 ¶ | |||
[RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data | [RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data | |||
Interchange Format", STD 90, RFC 8259, | Interchange Format", STD 90, RFC 8259, | |||
DOI 10.17487/RFC8259, December 2017, | DOI 10.17487/RFC8259, December 2017, | |||
<https://www.rfc-editor.org/info/rfc8259>. | <https://www.rfc-editor.org/info/rfc8259>. | |||
[RFC8288] Nottingham, M., "Web Linking", RFC 8288, | [RFC8288] Nottingham, M., "Web Linking", RFC 8288, | |||
DOI 10.17487/RFC8288, October 2017, | DOI 10.17487/RFC8288, October 2017, | |||
<https://www.rfc-editor.org/info/rfc8288>. | <https://www.rfc-editor.org/info/rfc8288>. | |||
[I-D.ietf-httpbis-semantics] | [RFC9110] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | |||
Fielding, R. T., Nottingham, M., and J. Reschke, "HTTP | Ed., "HTTP Semantics", STD 97, RFC 9110, | |||
Semantics", Work in Progress, Internet-Draft, draft-ietf- | DOI 10.17487/RFC9110, June 2022, | |||
httpbis-semantics-19, 12 September 2021, | <https://www.rfc-editor.org/info/rfc9110>. | |||
<https://datatracker.ietf.org/doc/html/draft-ietf-httpbis- | ||||
semantics-19>. | ||||
11. Informative References | [W3C.REC-json-ld] | |||
Sporny, M., Ed., Kellogg, G., Ed., and M. Lanthaler, Ed., | ||||
"JSON-LD 1.1: A JSON-based Serialization for Linked Data", | ||||
W3C Recommendation REC-json-ld-20140116, July 2020, | ||||
<https://www.w3.org/TR/json-ld/>. | ||||
[W3C.REC-rdf11-concepts-20140225] | 10.2. Informative References | |||
Cyganiak, R., Wood, D., and M. Lanthaler, "RDF 1.1 | ||||
Concepts and Abstract Syntax", World Wide Web Consortium | [DCMI-TERMS] | |||
Recommendation REC-rdf11-concepts-20140225, 25 February | Dublin Core Metadata Initiative, "DCMI Metadata Terms", | |||
2014, | January 2020, <https://www.dublincore.org/specifications/ | |||
<https://www.w3.org/TR/2014/REC-rdf11-concepts-20140225>. | dublin-core/dcmi-terms/>. | |||
[RFC5988] Nottingham, M., "Web Linking", RFC 5988, | [RFC5988] Nottingham, M., "Web Linking", RFC 5988, | |||
DOI 10.17487/RFC5988, October 2010, | DOI 10.17487/RFC5988, October 2010, | |||
<https://www.rfc-editor.org/info/rfc5988>. | <https://www.rfc-editor.org/info/rfc5988>. | |||
[RFC6690] Shelby, Z., "Constrained RESTful Environments (CoRE) Link | [RFC6690] Shelby, Z., "Constrained RESTful Environments (CoRE) Link | |||
Format", RFC 6690, DOI 10.17487/RFC6690, August 2012, | Format", RFC 6690, DOI 10.17487/RFC6690, August 2012, | |||
<https://www.rfc-editor.org/info/rfc6690>. | <https://www.rfc-editor.org/info/rfc6690>. | |||
[RFC6906] Wilde, E., "The 'profile' Link Relation Type", RFC 6906, | [RFC6906] Wilde, E., "The 'profile' Link Relation Type", RFC 6906, | |||
DOI 10.17487/RFC6906, March 2013, | DOI 10.17487/RFC6906, March 2013, | |||
<https://www.rfc-editor.org/info/rfc6906>. | <https://www.rfc-editor.org/info/rfc6906>. | |||
[RFC7284] Lanthaler, M., "The Profile URI Registry", RFC 7284, | [RFC7284] Lanthaler, M., "The Profile URI Registry", RFC 7284, | |||
DOI 10.17487/RFC7284, June 2014, | DOI 10.17487/RFC7284, June 2014, | |||
<https://www.rfc-editor.org/info/rfc7284>. | <https://www.rfc-editor.org/info/rfc7284>. | |||
[RFC7942] Sheffer, Y. and A. Farrel, "Improving Awareness of Running | [W3C.REC-rdf11-concepts] | |||
Code: The Implementation Status Section", BCP 205, | Cyganiak, R., Ed., Wood, D., Ed., and M. Lanthaler, Ed., | |||
RFC 7942, DOI 10.17487/RFC7942, July 2016, | "RDF 1.1 Concepts and Abstract Syntax", W3C Consortium | |||
<https://www.rfc-editor.org/info/rfc7942>. | Recommendation REC-rdf11-concepts, February 2014, | |||
<https://www.w3.org/TR/rdf11-concepts/>. | ||||
[DCMI-TERMS] | ||||
Initiative, D. C. M., "DCMI Metadata Terms", 2020, | ||||
<https://www.dublincore.org/specifications/dublin-core/ | ||||
dcmi-terms/>. | ||||
Appendix A. JSON-LD Context | Appendix A. JSON-LD Context | |||
A set of links rendered according to the JSON serialization defined | A set of links rendered according to the JSON serialization defined | |||
in Section 4.2 can be interpreted as RDF triples by adding a JSON-LD | in Section 4.2 can be interpreted as RDF triples by adding a JSON-LD | |||
context [W3C.REC-json-ld-20140116] that maps the JSON keys to | context [W3C.REC-json-ld] that maps the JSON keys to corresponding | |||
corresponding Linked Data terms. And, as per | Linked Data terms. And, as per Section 6.1 of [W3C.REC-json-ld], | |||
[W3C.REC-json-ld-20140116] section 6.8 (https://www.w3.org/TR/2014/ | when delivering a link set that is rendered according to the | |||
REC-json-ld-20140116/#interpreting-json-as-json-ld), when delivering | "application/linkset+json" media type to a user agent, a server can | |||
a link set that is rendered according to the "application/ | convey the availability of such a JSON-LD context by using a link | |||
linkset+json" media type to a user agent, a server can convey the | with the relation type "http://www.w3.org/ns/json-ld#context" in the | |||
availability of such a JSON-LD context by using a link with the | HTTP "Link" header field. | |||
relation type "http://www.w3.org/ns/json-ld#context" in the HTTP | ||||
"Link" header. | ||||
Figure 19 shows the response to an HTTP GET against the URI of a link | Figure 19 shows the response to an HTTP GET against the URI of a link | |||
set resource and illustrates this approach to support discovery of a | set resource and illustrates this approach to support the discovery | |||
JSON-LD Context. The example is inspired by the GS1 implementation | of a JSON-LD context. This example is inspired by the GS1 | |||
and shows a link set that uses relation types from the GS1 vocabulary | implementation and shows a link set that uses relation types from the | |||
at <https://www.gs1.org/voc/> that are expressed as HTTP URIs. | GS1 vocabulary at <https://www.gs1.org/voc/> that are expressed as | |||
HTTP URIs. | ||||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
Date: Mon, 11 Oct 2021 10:48:22 GMT | Date: Mon, 11 Oct 2021 10:48:22 GMT | |||
Server: Apache-Coyote/1.1 | Server: Apache-Coyote/1.1 | |||
Content-Type: application/linkset+json | Content-Type: application/linkset+json | |||
Link: <https://example.org/contexts/linkset.jsonld> | Link: <https://example.org/contexts/linkset.jsonld> | |||
; rel="http://www.w3.org/ns/json-ld#context" | ; rel="http://www.w3.org/ns/json-ld#context" | |||
; type="application/ld+json" | ; type="application/ld+json" | |||
Content-Length: 1532 | Content-Length: 1532 | |||
skipping to change at page 30, line 26 ¶ | skipping to change at line 1346 ¶ | |||
"value": "Voyez-le en action!", | "value": "Voyez-le en action!", | |||
"language": "fr" | "language": "fr" | |||
} | } | |||
] | ] | |||
} | } | |||
] | ] | |||
} | } | |||
] | ] | |||
} | } | |||
Figure 19: Using a typed link to support discovery of a JSON-LD | Figure 19: Using a typed link to support the discovery of a JSON- | |||
Context for a Set of Links | LD context for a linkset | |||
In order to obtain the JSON-LD Context conveyed by the server, the | In order to obtain the JSON-LD context conveyed by the server, the | |||
user agent issues an HTTP GET against the link target of the link | user agent issues an HTTP GET against the link target of the link | |||
with the "http://www.w3.org/ns/json-ld#context" relation type. The | with the "http://www.w3.org/ns/json-ld#context" relation type. The | |||
response to this GET is shown in Figure 20. This particular JSON-LD | response to this GET is shown in Figure 20. This particular JSON-LD | |||
context maps "application/linkset+json" representations of link sets | context maps "application/linkset+json" representations of link sets | |||
to Dublin Core Terms [DCMI-TERMS]. Note that the "linkset" entry in | to Dublin Core terms [DCMI-TERMS]. Note that the "linkset" entry in | |||
the JSON-LD context is introduced to support links with the "linkset" | the JSON-LD context is introduced to support links with the "linkset" | |||
relation type in link sets. | relation type in link sets. | |||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
Content-Type: application/ld+json | Content-Type: application/ld+json | |||
Content-Length: 658 | Content-Length: 658 | |||
{ | { | |||
"@context": [ | "@context": [ | |||
{ | { | |||
skipping to change at page 31, line 43 ¶ | skipping to change at line 1396 ¶ | |||
"language": "@language", | "language": "@language", | |||
"value": "@value", | "value": "@value", | |||
"hreflang": { | "hreflang": { | |||
"@id": "http://purl.org/dc/terms/language", | "@id": "http://purl.org/dc/terms/language", | |||
"@container": "@set" | "@container": "@set" | |||
} | } | |||
} | } | |||
] | ] | |||
} | } | |||
Figure 20: JSON-LD Context mapping to Dublin Core Terms | Figure 20: JSON-LD context mapping to Dublin Core terms | |||
Applying the JSON-LD context of Figure 20 to the link set of | Applying the JSON-LD context of Figure 20 to the link set of | |||
Figure 19 allows transforming the "application/linkset+json" link set | Figure 19 allows transforming the "application/linkset+json" link set | |||
to an RDF link set. Figure 21 shows the latter represented by means | to an RDF link set. Figure 21 shows the latter represented by means | |||
of the "text/turtle" RDF serialization. | of the "text/turtle" RDF serialization. | |||
<https://example.com/en/defaultPage> | <https://example.com/en/defaultPage> | |||
<http://purl.org/dc/terms/format> | <http://purl.org/dc/terms/format> | |||
"text/html" . | "text/html" . | |||
<https://example.com/en/defaultPage> | <https://example.com/en/defaultPage> | |||
skipping to change at page 33, line 4 ¶ | skipping to change at line 1451 ¶ | |||
<https://example.com/fr/defaultPage> . | <https://example.com/fr/defaultPage> . | |||
<https://id.gs1.org/01/09506000149301> | <https://id.gs1.org/01/09506000149301> | |||
<https://gs1.org/voc/relatedVideo> | <https://gs1.org/voc/relatedVideo> | |||
<https://video.example> . | <https://video.example> . | |||
<https://id.gs1.org/01/09506000149301> | <https://id.gs1.org/01/09506000149301> | |||
<https://gs1.org/voc/whatsInTheBox> | <https://gs1.org/voc/whatsInTheBox> | |||
<https://example.com/en/packContents/GB> . | <https://example.com/en/packContents/GB> . | |||
<https://id.gs1.org/01/09506000149301> | <https://id.gs1.org/01/09506000149301> | |||
<https://gs1.org/voc/whatsInTheBox> | <https://gs1.org/voc/whatsInTheBox> | |||
<https://example.com/fr/packContents/CH> . | <https://example.com/fr/packContents/CH> . | |||
<https://id.gs1.org/01/09506000149301> | <https://id.gs1.org/01/09506000149301> | |||
<https://gs1.org/voc/whatsInTheBox> | <https://gs1.org/voc/whatsInTheBox> | |||
<https://example.com/fr/packContents/FR> . | <https://example.com/fr/packContents/FR> . | |||
<https://video.example> | <https://video.example> | |||
<http://purl.org/dc/terms/language> | <http://purl.org/dc/terms/language> | |||
"en" . | "en" . | |||
<https://video.example> | <https://video.example> | |||
<http://purl.org/dc/terms/language> | <http://purl.org/dc/terms/language> | |||
"fr" . | "fr" . | |||
<https://video.example> | <https://video.example> | |||
<http://purl.org/dc/terms/title> | <http://purl.org/dc/terms/title> | |||
"See it in action!"@en . | "See it in action!"@en . | |||
<https://video.example> | <https://video.example> | |||
<http://purl.org/dc/terms/title> | <http://purl.org/dc/terms/title> | |||
"Voyez-le en action!"@fr . | "Voyez-le en action!"@fr . | |||
Figure 21: RDF serialization of the link set resulting from | Figure 21: RDF serialization of the linkset resulting from | |||
applying the JSON-LD context | applying the JSON-LD context | |||
Appendix B. Implementation Status | ||||
This section is to be removed before publishing as an RFC. | ||||
This section records the status of known implementations of the | ||||
protocol defined by this specification at the time of posting of this | ||||
Internet-Draft, and is based on a proposal described in RFC 7942 | ||||
[RFC7942]. The description of implementations in this section is | ||||
intended to assist the IETF in its decision processes in progressing | ||||
drafts to RFCs. Please note that the listing of any individual | ||||
implementation here does not imply endorsement by the IETF. | ||||
Furthermore, no effort has been spent to verify the information | ||||
presented here that was supplied by IETF contributors. This is not | ||||
intended as, and must not be construed to be, a catalog of available | ||||
implementations or their features. Readers are advised to note that | ||||
other implementations may exist. | ||||
According to RFC 7942, "this will allow reviewers and working groups | ||||
to assign due consideration to documents that have the benefit of | ||||
running code, which may serve as evidence of valuable experimentation | ||||
and feedback that have made the implemented protocols more mature. | ||||
It is up to the individual working groups to use this information as | ||||
they see fit". | ||||
B.1. GS1 | ||||
GS1 is a provider of identifiers, most famously seen in EAN/UPC | ||||
barcodes for retail and healthcare products, and manages an ecology | ||||
of services and standards to leverage them at a global scale. GS1 | ||||
has indicated that it will fully implement this "linkset" | ||||
specification as a means to allow requesting and representing links | ||||
pertaining to products, shipments, assets and locations. The current | ||||
GS1 Digital Link specification makes an informative reference to | ||||
version 03 of the "linkset" I-D, mentions the formal adoption of that | ||||
I-D by the IETF HTTPAPI Working Group, and indicates it being on | ||||
track to achieve RFC status. The GS1 Digital Link specification | ||||
adopts the JSON format specified by the I-D and mentions future plans | ||||
to also support the Link header format as well as their respective | ||||
media types, neither of which have changed since version 03. | ||||
B.2. FAIR Signposting Profile | ||||
The FAIR Signposting Profile is a community specification aimed at | ||||
improving machine navigation of scholarly objects on the web through | ||||
the use of typed web links pointing at e.g. web resources that are | ||||
part of a specific object, persistent identifiers for the object and | ||||
its authors, license information pertaining to the object. The | ||||
specification encourages the use of Linksets and initial | ||||
implementations are ongoing, for example, for the open source | ||||
Dataverse data repository platform that was initiated by Harvard | ||||
University and is meanwhile used by research institutions, worldwide. | ||||
B.3. Open Journal Systems (OJS) | ||||
Open Journal Systems (OJS) is an open-source software for the | ||||
management of peer-reviewed academic journals, and is created by the | ||||
Public Knowledge Project (PKP), released under the GNU General Public | ||||
License. Open Journal Systems (OJS) is a journal management and | ||||
publishing system that has been developed by PKP through its | ||||
federally funded efforts to expand and improve access to research. | ||||
The OJS platform has implemented "linkset" support as an alternative | ||||
way to provide links when there are more than a configured limit | ||||
(they consider using about 10 as a good default, for testing purpose | ||||
it is currently set to 8). | ||||
Acknowledgements | Acknowledgements | |||
Thanks for comments and suggestions provided by Phil Archer, | Thanks for comments and suggestions provided by Phil Archer, | |||
Dominique Guinard, Mark Nottingham, Julian Reschke, Rob Sanderson, | Dominique Guinard, Mark Nottingham, Julian Reschke, Rob Sanderson, | |||
Stian Soiland-Reyes, Sarven Capadisli, and Addison Phillips. | Stian Soiland-Reyes, Sarven Capadisli, and Addison Phillips. | |||
Authors' Addresses | Authors' Addresses | |||
Erik Wilde | Erik Wilde | |||
Axway | Axway | |||
Email: erik.wilde@dret.net | Email: erik.wilde@dret.net | |||
URI: http://dret.net/netdret/ | ||||
Herbert Van de Sompel | Herbert Van de Sompel | |||
Data Archiving and Networked Services | Data Archiving and Networked Services | |||
Email: herbert.van.de.sompel@dans.knaw.nl | Email: herbert.van.de.sompel@dans.knaw.nl | |||
URI: https://orcid.org/0000-0002-0715-6126 | URI: https://orcid.org/0000-0002-0715-6126 | |||
End of changes. 158 change blocks. | ||||
492 lines changed or deleted | 402 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |