| 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. | ||||