<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.11 (Ruby 3.1.2) -->
<?rfc tocindent="yes"?>
<?rfc strict="yes"?>
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-polli-restapi-ld-keywords-00" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.10 -->
  <front>
    <title>REST API Linked Data Keywords</title>
    <seriesInfo name="Internet-Draft" value="draft-polli-restapi-ld-keywords-00"/>
    <author initials="R." surname="Polli" fullname="Roberto Polli">
      <organization>Digital Transformation Department, Italian Government</organization>
      <address>
        <postal>
          <country>Italy</country>
        </postal>
        <email>robipolli@gmail.com</email>
      </address>
    </author>
    <date year="2022" month="June" day="23"/>
    <area>General</area>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document defines two
keywords to provide semantic information in
OpenAPI Specification and JSON Schema documents.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-polli-restapi-ld-keywords/"/>.
      </t>
      <t>
         information can be found at <eref target="https://github.com/ioggstream/draft-polli-restapi-ld-keywords"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ioggstream/draft-polli-restapi-ld-keywords/issues"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>API providers usually specify semantic information in text or out-of-band documents;
at best, this information is described in prose into specific sections of interface definition documents (see <xref target="prosaic-semantics"/>).</t>
      <t>This is because API providers do not always value machine-readable semantics,
or because they have no knowledge of semantic technologies -
that are perceived as unnecessarily complex.</t>
      <t>A full-semantic approach (e.g. writing RDF oriented APIs) has not become widespread
because
transferring and processing the semantics on every message
significantly increases data transfer and computation requirements.</t>
      <t>Moreover the semantic landscape do not provide easy ways of defining / constraining
the syntax of an object:
tools like <xref target="SHACL"/> and <xref target="OWL"/> restrictions are considered
computationally intensive to process and complex to use
from web and mobile developers.</t>
      <t>This document provides a simple mechanism
to attach semantic information to REST APIs
that rely on different dialects of <xref target="JSONSCHEMA"/>.</t>
      <t>For example, the OpenAPI Specifications (see <xref target="OAS"/>)
allow to describe REST APIs
interactions and capabilities using a machine-readable format
based on <xref target="JSON"/> or <xref target="YAML"/>.
OAS 3.0 is based on JSON Schema draft-4
while OAS 3.1 relies on the latest JSON Schema draft.</t>
      <section anchor="goals-and-design-choices">
        <name>Goals and Design Choices</name>
        <t>This document has the following goals:</t>
        <ul spacing="normal">
          <li>describe in a single specification document backed by <xref target="JSONSCHEMA"/>
(e.g. an OpenAPI document)
both the syntax and semantics of JSON objects.
This information can be either be provided
editing the document by hand or via automated tools;</li>
          <li>easy for non-semantic experts and with reduced complexity;</li>
          <li>support for OAS 3.0 / JSON Schema Draft4;</li>
        </ul>
        <t>while it is not intended to:</t>
        <ul spacing="normal">
          <li>integrate the syntax defined using <xref target="JSONSCHEMA"/>;</li>
          <li>infer semantic information where it is not provided;</li>
          <li>convert <xref target="JSONSCHEMA"/> documents to RDF Schema (see <xref target="RDFS"/>) or XML Schema.</li>
        </ul>
        <t>Thus, the following design choices have been made:</t>
        <ul spacing="normal">
          <li>the semantic context of a JSON object will be described
using <xref target="JSON-LD-11"/> and its keywords;</li>
          <li>property names are limited to characters that can be used in variable
names (e.g. excluding <tt>:</tt> and <tt>.</tt>);
to avoid interoperability issues with code-generation tools;</li>
          <li>privilege a deterministic behavior over automation and composability;</li>
          <li>interoperable with the mechanisms described in Section 6.1 of <xref target="JSON-LD-11"/>
for conveying semantic context in REST APIs.</li>
        </ul>
      </section>
      <section anchor="prosaic-semantics">
        <name>Prosaic semantics</name>
        <t><xref target="JSONSCHEMA"/> allows to define the structure of the exchanged data using specific keywords.
Properties' semantics can be expressed in prose via the <tt>description</tt> keyword.</t>
        <figure anchor="ex-semantic-prose">
          <name>Example of JSON Schema model that provides semantic prose.</name>
          <sourcecode type="yaml"><![CDATA[
Person:
  description: A Person.
  type: object
  properties:
    givenName:
      description: The given name of a Person.
      type: string
    familyName:
      description: The family name, or surname, of a Person.
      type: string
  example:
    givenName: John
    familyName: Doe
]]></sourcecode>
        </figure>
        <t><xref target="JSON-LD-11"/> defines a way to interpret a JSON object as JSON-LD:
the example schema instance (a JSON document conformant to a given schema)
provided in the above "Person" schema can be integrated with
semantic information adding the <tt>@type</tt> and <tt>@context</tt> properties.</t>
        <figure anchor="ex-json-ld">
          <name>Example of a schema instance transformed in a JSON-LD object.</name>
          <sourcecode type="json"><![CDATA[
{
  "@context": {
    "@vocab": "https://w3.org/ns/person#"
  },
  "@type": "Person",
  "givenName": "John",
  "familyName": "Doe"
}
]]></sourcecode>
        </figure>
        <t>This document shows how
to integrate into a JSON Schema document
information that can be used
to add the <tt>@context</tt> and <tt>@type</tt>
properties to the associated JSON Schema instances.</t>
      </section>
      <section anchor="notational-conventions">
        <name>Notational Conventions</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.
These words may also appear in this document in
lower case as plain English words, absent their normative meanings.</t>
        <t>The terms  "content", "content negotiation", "resource",
and "user agent"
in this document are to be interpreted as in <xref target="HTTP"/>.</t>
        <t>The terms "fragment" and "fragment identifier"
in this document are to be interpreted as in <xref target="URI"/>.</t>
        <t>The terms "node", "alias node", "anchor" and "named anchor"
in this document are to be intepreded as in <xref target="YAML"/>.</t>
        <t>The terms "schema" and "schema instance"
in this document are to be intepreded as in <xref target="JSONSCHEMA"/>
draft-4 and higher.</t>
        <t>The terms "JSON object", "JSON document", "member", "member name"
in this document are to be intepreded as in <xref target="JSON"/>.
The term "property" - when referred to a JSON document
such as a schema instance -
is a synonym of "member name",
and the term "property value" is a synonym of "member value".</t>
        <t>The terms "@context", "@type", "@id", "@value" and "@language" are to be interpreted as JSON-LD keywords in <xref target="JSON-LD-11"/>,
whereas the term "context" is to be interpreted as a JSON-LD Context
defined in the same document.</t>
        <t>Since JSON-LD is a serialization format for RDF,
the document can use JSON-LD and RDF interchangeably
when it refers to the semantic interpretation of a resource.</t>
        <t>The JSON Schema keywords defined in <xref target="keywords"/>
are collectively named "semantic keywords".</t>
      </section>
    </section>
    <section anchor="keywords">
      <name>JSON Schema keywords</name>
      <t>A schema (see <xref target="JSONSCHEMA"/>) MAY
use the following JSON Schema keywords,
collectively named "semantic keywords"
to provide semantic information
for all related schema instances.</t>
      <dl>
        <dt>x-jsonld-type:</dt>
        <dd>
          <t>This keyword conveys an RDF type (see <xref target="RDF"/>)
 for the JSON schema instances described by the associate
 schema. It is defined in <xref target="keywords-type"/>.</t>
        </dd>
        <dt>x-jsonld-context:</dt>
        <dd>
          <t>This keyword conveys a JSON-LD context
 for the JSON schema instances described by the associate
 schema. It is defined in <xref target="keywords-context"/>.</t>
        </dd>
      </dl>
      <t>This specification MAY be used to:</t>
      <ul spacing="normal">
        <li>populate the <tt>@type</tt> property along the schema instance objects;</li>
        <li>compose an "instance context" to populate the <tt>@context</tt>
property at the root of the schema instance.</li>
      </ul>
      <t>The schema MUST be of type "object".
This is because <xref target="JSON-LD-11"/> does not define a way
to provide semantic information on JSON values that
are not JSON objects.</t>
      <t>The schema MUST NOT describe a JSON-LD
(e.g. of <tt>application/ld+json</tt> media type)
or conflicts will arise, such as
which is the correct <tt>@context</tt> or <tt>@type</tt>
(see <xref target="sec-conflicts"/>).</t>
      <t>Both JSON Schema keywords defined in this document
might contain URI references.
Those references MUST NOT be dereferenced automatically,
since there is no guarantee that they point to actual
locations.
Moreover they could reference unsecured resources
(e.g. using the "http://" URI scheme <xref target="HTTP"/>).</t>
      <t><xref target="ex"/> provides various examples of integrating
semantic information in schema instances.</t>
      <section anchor="keywords-type">
        <name>The x-jsonld-type JSON Schema keyword</name>
        <t>The x-jsonld-type value
provides information on the RDF type of the associate
schema instances.</t>
        <t>It SHOULD NOT reference an <eref target="https://www.w3.org/TR/rdf11-concepts/#section-Datatypes">RDF Datatype</eref>, because
it is not intended to provide
syntax information, but only semantic ones.</t>
      </section>
      <section anchor="keywords-context">
        <name>The x-jsonld-context JSON Schema keyword</name>
        <t>The x-jsonld-context value
provides the information required to interpret the associate
schema instances as JSON-LD
according to the specification in <eref target="https://www.w3.org/TR/json-ld11/#interpreting-json-as-json-ld">Section 6.1 of JSON-LD-11</eref>.</t>
        <t>Its value MUST be a valid JSON-LD Context
(see
<eref target="https://www.w3.org/TR/json-ld11/#context-definitions">Section 9.15 of JSON-LD-11</eref>
).</t>
        <t>When context composition (see <xref target="int-composability"/>) is needed,
the context SHOULD be provided in the form of a JSON object;
in fact, if the x-jsonld-context is an URL string,
to generate the instance context that URL needs to be
dereferenced and processed.</t>
        <figure anchor="ex-url-contexts">
          <name>Composing URL contexts requires dereferencing them.</name>
          <sourcecode type="yaml"><![CDATA[
Place:
  type: object
  x-jsonld-context:
    "@vocab": "https://my.context/location.jsonld"
  properties:
    country: {type: string}

Person:
  x-jsonld-context: https://my.context/person.jsonld
  type: object
  properties:
    birthplace:
      $ref: "#/Place"
]]></sourcecode>
        </figure>
      </section>
      <section anchor="interpreting">
        <name>Interpreting schema instances</name>
        <t>This section describes an OPTIONAL workflow
to interpret a schema instance as JSON-LD.</t>
        <ol spacing="normal" type="1"><li>ensure that the initial schema instance does not contain
any <tt>@context</tt> or <tt>@type</tt> property.
For further information see <xref target="sec-conflicts"/>;</li>
          <li>add the <tt>@context</tt> property with the value of x-jsonld-context.
This will be the initial "instance context": the only one that will be mangled;</li>
          <li>add the <tt>@type</tt> property with the value of x-jsonld-type;</li>
          <li>
            <t>iterate on each instance property like the following:  </t>
            <ul spacing="normal">
              <li>identify the sub-schema associated to the property
(e.g. resolving $refs)
and check the presence of semantic keywords;</li>
              <li>for the x-jsonld-type, add the <tt>@type</tt> property to the sub-instance;</li>
              <li>for the x-jsonld-context, integrate its information in the instance context
when they are not already present;</li>
              <li>iterate this process in case of nested entries.</li>
            </ul>
          </li>
        </ol>
        <t>The specific algorithm
for integrating the values of x-jsonld-context
present in sub-schemas
into the instance context (see <xref target="keywords"/>)
is an implementation detail.</t>
      </section>
    </section>
    <section anchor="int">
      <name>Interoperability Considerations</name>
      <t>See the interoperability considerations for the media types
and specifications used, including <xref target="YAML"/>, <xref target="JSON"/>, <xref target="OAS"/>,
<xref target="JSONSCHEMA"/> and <xref target="JSON-LD-11"/>.</t>
      <t>A schema annotated with semantic keywords
containing JSON-LD keywords
(e.g. <tt>@context</tt>, <tt>@type</tt> and <tt>@language</tt>)
cannot be interpreted as a JSON-LD document.
This is generally not a problem, since it is a document
following the <xref target="OAS"/> and <xref target="JSONSCHEMA"/> specification.</t>
      <section anchor="int-syntax-oos">
        <name>Syntax is out of scope</name>
        <t>This specification is not designed to restrict
the syntax of a JSON value nor to support a conversion
between JSON Schema and XMLSchema
(see <xref target="keywords-type"/>).</t>
      </section>
      <section anchor="int-expressivity">
        <name>Limited expressivity</name>
        <t>Not all RDF resources can be expressed as JSON documents
annotated with <tt>@context</tt> and <tt>@type</tt>:
this specification is limited by the possibilities
of <eref target="https://www.w3.org/TR/json-ld11/#interpreting-json-as-json-ld">Section 6.1 of JSON-LD-11</eref>.
On the other hand, since this approach
delegates almost all the processing to of JSON-LD,
as long as JSON-LD evolves
it will cover further use cases.</t>
      </section>
      <section anchor="int-no-jsonld">
        <name>Disjoint with JSON-LD</name>
        <t>This specification is not designed to pre-process
or mangle JSON-LD documents
(e.g. to add a missing <tt>@type</tt> to a JSON-LD document),
but only to support schemas that do not describe JSON-LD documents.</t>
        <t>Applications exchanging JSON-LD documents
need to explicitly populate <tt>@type</tt> and <tt>@context</tt>,
and use a proper media type
since Linked Data processing and interpretation
requires further checks.</t>
        <t>If these applications describes messages using <xref target="JSONSCHEMA"/> or <xref target="OAS"/>,
they needs to
process them with a JSON-LD processor
and declare all required properties
in the schema - like in the example below.</t>
        <sourcecode type="yaml"><![CDATA[
PersonLD:
  type: object
  required: [ "@context", "@type", "givenName", "familyName" ]
  properties:
    "@context":
      type: object
      enum:
      - "@vocab": "https://w3.org/ns/person#"
    "@type":
      type: string
      enum:
      - Person
    givenName:
      type: string
    familyName:
      type: string
]]></sourcecode>
      </section>
      <section anchor="int-composability">
        <name>Composability</name>
        <t>Composability can be achieved applying the process described
in <xref target="interpreting"/>.
This process is inherently complex, and composability
is not an explicit goal of this specification.</t>
        <t>Well-designed schemas do not usually have
more than 3 or 4 nested levels.
This means that, when needed, it is possible
to assemble and optimize an instance context (see <xref target="keywords"/>)
at design time and use it to valorize x-jsonld-context
(see <xref target="ex-redundant-context"/>).</t>
        <t>Once a context is assembled, the RDF data can be
generated using the algorithms described in <xref target="JSONLD-11-API"/>
for example through a library.</t>
        <sourcecode type="python"><![CDATA[
from pyld import jsonld
...
jsonld_text = jsonld.expand(schema_instance, context)
]]></sourcecode>
      </section>
    </section>
    <section anchor="sec">
      <name>Security Considerations</name>
      <t>See the interoperability considerations for the media types
and specifications used, including <xref target="YAML"/>, <xref target="JSON"/>, <xref target="OAS"/>,
<xref target="JSONSCHEMA"/> and <xref target="JSON-LD-11"/>.</t>
      <section anchor="sec-integrity">
        <name>Integrity and Authenticity</name>
        <t>Adding a semantic context to a JSON document
alters its value and, in an implementation-dependent way,
can lead to reordering of fields.
This process can thus affect the processing of digitally signed content.</t>
      </section>
      <section anchor="sec-conflicts">
        <name>Conflicts</name>
        <t>If an OAS document includes the keywords defined in <xref target="keywords"/>
the provider explicitly states that the semantic of the schema instance:</t>
        <ul spacing="normal">
          <li>is defined at contract level;</li>
          <li>is the same for every message;</li>
          <li>and is not conveyed nor specific for each message.</li>
        </ul>
        <t>In this case, processing the semantic conveyed in a message
might have security implications.</t>
        <t>An application that relies on this specification
might want to define separate processing streams for JSON documents
and RDF graphs, even when RDF graphs are serialized as JSON-LD documents.
For example, it might want to raise an error
when an <tt>application/json</tt> resource contains unexpected properties
impacting on the application logic
like <tt>@type</tt> and <tt>@context</tt>.</t>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>None</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="YAML" target="https://yaml.org/spec/1.2.2/">
          <front>
            <title>YAML Ain't Markup Language Version 1.2</title>
            <author initials="" surname="Oren Ben-Kiki">
              <organization/>
            </author>
            <author initials="" surname="Clark Evans">
              <organization/>
            </author>
            <author initials="" surname="Ingy dot Net">
              <organization/>
            </author>
            <author initials="" surname="Tina Müller">
              <organization/>
            </author>
            <author initials="" surname="Pantelis Antoniou">
              <organization/>
            </author>
            <author initials="" surname="Eemeli Aro">
              <organization/>
            </author>
            <author initials="" surname="Thomas Smith">
              <organization/>
            </author>
            <date year="2021" month="October" day="01"/>
          </front>
        </reference>
        <reference anchor="OAS">
          <front>
            <title>OpenAPI Specification 3.0.0</title>
            <author initials="" surname="Darrel Miller">
              <organization/>
            </author>
            <author initials="" surname="Jeremy Whitlock">
              <organization/>
            </author>
            <author initials="" surname="Marsh Gardiner">
              <organization/>
            </author>
            <author initials="" surname="Mike Ralphson">
              <organization/>
            </author>
            <author initials="" surname="Ron Ratovsky">
              <organization/>
            </author>
            <author initials="" surname="Uri Sarid">
              <organization/>
            </author>
            <date year="2017" month="July" day="26"/>
          </front>
        </reference>
        <reference anchor="JSON-LD-11" target="https://www.w3.org/TR/json-ld11/">
          <front>
            <title>JSON-LD 1.1</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="JSONSCHEMA" target="https://json-schema.org/specification.html">
          <front>
            <title>JSON Schema</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="JSON">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray">
              <organization/>
            </author>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format.  It was derived from the ECMAScript Programming Language Standard.  JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="HTTP">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes. </t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="URI">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee">
              <organization/>
            </author>
            <author fullname="R. Fielding" initials="R." surname="Fielding">
              <organization/>
            </author>
            <author fullname="L. Masinter" initials="L." surname="Masinter">
              <organization/>
            </author>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource.  This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet.  The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier.  This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RDF" target="https://www.w3.org/TR/rdf11/">
          <front>
            <title>RDF Concepts and Abstract Syntax</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="RDFS" target="https://www.w3.org/TR/rdf-schema/">
          <front>
            <title>RDF Schema 1.1</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="I-D.ietf-jsonpath-base">
          <front>
            <title>JSONPath: Query expressions for JSON</title>
            <author fullname="Stefan Gössner">
              <organization>Fachhochschule Dortmund</organization>
            </author>
            <author fullname="Glyn Normington">
	 </author>
            <author fullname="Carsten Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="25" month="April" year="2022"/>
            <abstract>
              <t>   JSONPath defines a string syntax for selecting and extracting values
   within a JavaScript Object Notation (JSON, RFC 8259) value.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-jsonpath-base-05"/>
        </reference>
        <reference anchor="JSON-POINTER">
          <front>
            <title>JavaScript Object Notation (JSON) Pointer</title>
            <author fullname="P. Bryan" initials="P." role="editor" surname="Bryan">
              <organization/>
            </author>
            <author fullname="K. Zyp" initials="K." surname="Zyp">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham">
              <organization/>
            </author>
            <date month="April" year="2013"/>
            <abstract>
              <t>JSON Pointer defines a string syntax for identifying a specific value within a JavaScript Object Notation (JSON) document.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6901"/>
          <seriesInfo name="DOI" value="10.17487/RFC6901"/>
        </reference>
        <reference anchor="JSONLD-11-API" target="https://www.w3.org/TR/json-ld11-api/">
          <front>
            <title>JSON-LD 1.1 Processing Algorithms and API</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="SHACL" target="https://www.w3.org/TR/shacl/">
          <front>
            <title>Shapes Constraint Language (SHACL)</title>
            <author>
              <organization/>
            </author>
            <date year="2017" month="July" day="20"/>
          </front>
        </reference>
        <reference anchor="OWL" target="https://www.w3.org/TR/owl2-overview/">
          <front>
            <title>OWL 2 Web Ontology Language Document Overview</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="XS" target="https://www.w3.org/2001/XMLSchema">
          <front>
            <title>XML Schema</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <section anchor="ex">
      <name>Examples</name>
      <section anchor="schema-with-semantic-information">
        <name>Schema with semantic information</name>
        <t>The following example shows a
Person JSON Schema with semantic information
provided by the x-jsonld-type and x-jsonld-context.</t>
        <figure anchor="ex-base">
          <name>A JSON Schema data model with semantic context and type.</name>
          <sourcecode type="example"><![CDATA[
Person:
  "x-jsonld-type": "https://schema.org/Person"
  "x-jsonld-context":
     "@vocab": "https://schema.org/"
     custom_id: null  # detach this property from the @vocab
     country:
       "@id": addressCountry
       "@language": en
  type: object
  required:
  - given_name
  - family_name
  properties:
    familyName: { type: string, maxLength: 255  }
    givenName:  { type: string, maxLength: 255  }
    country:    { type: string, maxLength: 3, minLength: 3 }
    custom_id:  { type: string, maxLength: 255  }
  example:
    familyName: "Doe"
    givenName: "John"
    country: "FRA"
    custom_id: "12345"
]]></sourcecode>
        </figure>
        <t>The example object is assembled as a JSON-LD object as follows.</t>
        <sourcecode type="json"><![CDATA[
{
  "@context": {
    "@vocab": "https://schema.org/",
    "custom_id": null
  },
  "@type": "https://schema.org/Person",
  "familyName": "Doe",
  "givenName": "John",
  "country": "FRA",
  "custom_id": "12345"
}
]]></sourcecode>
        <t>The above JSON-LD can be represented as <tt>text/turtle</tt> as follows.</t>
        <sourcecode type="text"><![CDATA[
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
@prefix schema: <https://schema.org/>

_:b0 rdf:type schema:Person    ;
     schema:country     "FRA"  ;
     schema:familyName  "Doe"  ;
     schema:givenName   "John" .
]]></sourcecode>
      </section>
      <section anchor="ex-semantic-and-vocabulary">
        <name>Schema with semantic and vocabulary information</name>
        <t>The following example shows a
"Person" schema with semantic information
provided by the x-jsonld-type and x-jsonld-context.</t>
        <figure anchor="ex-complete-example">
          <name>A JSON Schema data model with semantic context and type.</name>
          <sourcecode type="example"><![CDATA[
Person:
  "x-jsonld-type": "https://schema.org/Person"
  "x-jsonld-context":
     "@vocab": "https://schema.org/"
     email: "@id"
     custom_id: null  # detach this property from the @vocab
     country:
       "@id": addressCountry
       "@type": "@id"
       "@context":
          "@base": "http://publications.europa.eu/resource/authority/country/"

  type: object
  required:
  - email
  - given_name
  - family_name
  properties:
    email: { type: string, maxLength: 255  }
    familyName: { type: string, maxLength: 255  }
    givenName:  { type: string, maxLength: 255  }
    country:    { type: string, maxLength: 3, minLength: 3 }
    custom_id:  { type: string, maxLength: 255  }
  example:
    familyName: "Doe"
    givenName: "John"
    email: "jon@doe.example"
    country: "FRA"
    custom_id: "12345"
]]></sourcecode>
        </figure>
        <t>The resulting RDF graph is</t>
        <figure anchor="ex-rdf-from-json">
          <name>An RDF graph with semantic context and type.</name>
          <sourcecode type="text"><![CDATA[
@prefix schema: <https://schema.org/> .
@prefix country: <http://publications.europa.eu/resource/authority/country/> .

<mailto:jon@doe.example>
  schema:familyName "Doe"          ;
  schema:givenName "John"          ;
  schema:addressCountry country:FRA .
]]></sourcecode>
        </figure>
      </section>
      <section anchor="ex-cyclic-schema">
        <name>Cyclic schema</name>
        <t>The following schema contains a cyclic reference.</t>
        <sourcecode type="yaml"><![CDATA[
Person:
  description: Simple cyclic example.
  x-jsonld-type: Person
  x-jsonld-context:
    "email": "@id"
    "@vocab": "https://w3.org/ns/person#"
    children:
      "@container": "@set"
  type: object
  properties:
    email: { type: string }
    children:
      type: array
      items:
        $ref: '#/Person'
  example:
    email: "mailto:a@example"
    children:
    - email: "mailto:dough@example"
    - email: "mailto:son@example"
]]></sourcecode>
        <t>The example schema instance contained in the above schema
results in the following JSON-LD document.</t>
        <sourcecode type="json"><![CDATA[
{
  "email": "mailto:a@example",
  "children": [
    {
      "email": "mailto:dough@example",
      "@type": "Person"
    },
    {
      "email": "mailto:son@example",
      "@type": "Person"
    }
  ],
  "@type": "Person",
  "@context": {
    "email": "@id",
    "@vocab": "https://w3.org/ns/person#",
    "children": {
      "@container": "@set"
    }
  }
}
]]></sourcecode>
        <t>Applying the workflow described in <xref target="interpreting"/>
just recursively copying the x-jsonld-context,
the instance context could have been more complex.</t>
        <figure anchor="ex-redundant-context">
          <name>An instance context containing redundant information</name>
          <sourcecode type="json"><![CDATA[
{
  ...
  "@context": {
    "email": "@id",
    "@vocab": "https://w3.org/ns/person#",
    "children": {
      "@container": "@set",
        "@context": {
          "email": "@id",
          "@vocab": "https://w3.org/ns/person#",
          "children": {
            "@container": "@set"
          }
        }
    }
  }
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="ex-instance-context">
        <name>Composite instance context</name>
        <t>In the following schema document,
the "Citizen" schema references the "BirthPlace" schema.</t>
        <figure anchor="ex-object-contexts">
          <name>A schema with object contexts.</name>
          <sourcecode type="yaml"><![CDATA[
BirthPlace:
  x-jsonld-type: https://w3id.org/italia/onto/CLV/Feature
  x-jsonld-context:
    "@vocab": "https://w3id.org/italia/onto/CLV/"
    country:
      "@id": "hasCountry"
      "@type": "@id"
      "@context":
        "@base": "http://publications.europa.eu/resource/authority/country/"
    province:
      "@id": "hasProvince"
      "@type": "@id"
      "@context":
        "@base": "https://w3id.org/italia/data/identifiers/provinces-identifiers/vehicle-code/"
  type: object
  required:
    - province
    - country
  properties:
    province:
      description: The province where the person was born.
      type: string
    country:
      description: The iso alpha-3 code of the country where the person was born.
      type: string
  example:
    province: RM
    country: ITA
Citizen:
  x-jsonld-type: Person
  x-jsonld-context:
    "email": "@id"
    "@vocab": "https://w3.org/ns/person#"
  type: object
  properties:
    email: { type: string }
    birthplace:
      $ref: "#/BirthPlace"
  example:
    email: "mailto:a@example"
    givenName: Roberto
    familyName: Polli
    birthplace:
      province: LT
      country: ITA

]]></sourcecode>
        </figure>
        <t>The example schema instance contained in the above schema
results in the following JSON-LD document.
The instance context contains information from both
"Citizen" and "BirthPlace" semantic keywords.</t>
        <figure anchor="ex-composite-context">
          <name>A @context that includes information from different schemas.</name>
          <sourcecode type="json"><![CDATA[
{
  "email": "mailto:a@example",
  "givenName": "Roberto",
  "familyName": "Polli",
  "birthplace": {
    "province": "RM",
    "country": "ITA",
    "@type": "https://w3id.org/italia/onto/CLV/Feature"
  },
  "@type": "Person",
  "@context": {
    "email": "@id",
    "@vocab": "https://w3.org/ns/person#",
    "birthplace": {
      "@context": {
        "@vocab": "https://w3id.org/italia/onto/CLV/",
        "city": "hasCity",
        "country": {
          "@id": "hasCountry",
          "@type": "@id",
          "@context": {
            "@base": "http://publications.europa.eu/resource/authority/country/"
          }
        },
        "province": {
          "@id": "hasProvince",
          "@type": "@id",
          "@context": {
            "@base": "https://w3id.org/italia/data/identifiers/provinces-identifiers/vehicle-code/"
          }
        }
      }
    }
  }
}
]]></sourcecode>
        </figure>
        <t>That can be serialized as <tt>text/turtle</tt> as</t>
        <figure anchor="ex-composite-context-turtle">
          <name>The above entry in text/turtle</name>
          <sourcecode type="text"><![CDATA[
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix eu: <https://w3.org/ns/person#> .
@prefix itl: <https://w3id.org/italia/onto/CLV/> .

<mailto:a@example>
  rdf:type eu:Person ;
  eu:birthplace _:b0 ;
  eu:familyName "Polli" ;
  eu:givenName  "Roberto"
.
_:b0 rdf:type itl:Feature ;
  itl:hasCountry <http://publications.europa.eu/resource/authority/country/ITA> .
  itl:hasProvince <https://w3id.org/italia/data/identifiers/provinces-identifiers/vehicle-code/RM>
.
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>Thanks to Giorgia Lodi, Matteo Fortini and Saverio Pulizzi for being the initial contributors of this work.</t>
      <t>In addition to the people above, this document owes a lot to the extensive discussion inside
and outside the workgroup.
The following contributors have helped improve this specification by
opening pull requests, reporting bugs, asking smart questions,
drafting or reviewing text, and evaluating open issues:</t>
      <t>Pierre-Antoine Champin,
and Vladimir Alexiev.</t>
    </section>
    <section numbered="false" removeInRFC="true" anchor="faq">
      <name>FAQ</name>
      <dl>
        <dt>Q: Why this document?</dt>
        <dd>
          <t>There's currently no standard way to provide machine-readable semantic
information in <xref target="OAS"/> / <xref target="JSONSCHEMA"/>.</t>
        </dd>
        <dt>Q: Why don't use existing <xref target="JSONSCHEMA"/> keywords like <tt>externalDocs</tt> ?</dt>
        <dd>
          <t>We already tried, but this was actually squatting a keyword designed
for <eref target="https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#externalDocumentationObject">human readable documents</eref>.</t>
        </dd>
        <dt>Q: Why using <tt>x-</tt> keywords?</dt>
        <dd>
          <t>OpenAPI 3.0 does not validate unregistered keywords that don't start with <tt>x-</tt>
and we want a solution that is valid for all OAS versions &gt;= 3.0.</t>
        </dd>
        <dt>Q: Why not using a full-semantic approach?</dt>
        <dd>
          <t>This approach allows API providers to attach metadata to their
specification without modifying their actual services nor their
implementation, since custom keywords are ignored by OpenAPI toolings
like Gateways and code generators.</t>
        </dd>
        <dt>Q: Why not defining a mechanism to attach semantic information to</dt>
        <dd>
          <t/>
        </dd>
        <dt>   non-object schemas (e.g. JSON Strings) like other implementations?</dt>
        <dd>
          <t>This is actually problematic. Look at this example that reuses
the <tt>TaxCode</tt> schema and semantic in different properties.</t>
        </dd>
        <dt>Q: Why don't use SHACL or OWL restrictions instead of JSON Schema?</dt>
        <dd>
          <t>Web and mobile developers consider JSON Schema is easier to use than SHACL.
Moreover, OWL restrictions are about semantics,
and are not designed to restrict the syntax.</t>
        </dd>
      </dl>
      <sourcecode type="yaml"><![CDATA[
    TaxCode:
      type: string
      $linkedData:
        "@id": "https://w3id.org/italia/onto/CPV/taxCode"
        "term": "taxCode"
    Contract:
      ...
      properties:
        employer_tax_code:
          # Beware! TaxCode.$linkedData.term == 'taxCode'
          $ref: "#/components/schemas/TaxCode"
        employee_tax_code:
          # Here we are reusing not only the schema,
          #   but even the same term.
          $ref: "#/components/schemas/TaxCode"
]]></sourcecode>
      <artwork><![CDATA[
For this reason, composability is limited to the object level.
]]></artwork>
    </section>
    <section numbered="false" removeInRFC="true" anchor="change-log">
      <name>Change Log</name>
      <t>TBD</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+0823LcxpXv+IrOMFU2a+ciUnYSjWKvaFKymVCiQlJ2UiqV
hAGaM21hgAkaIDVmMd+yH7JPuz+259aNBgYjUrGTbG0ty2UNgL6d+6VP92g0
iipTZXqqzp6eX6iDl8fqxOTvdaqO4ipWf9Tr66JMbRTPZqW+mkZpkeTxEpqn
ZXxZjVZFlplRqW0Vr8woS0fvpcPowYMoiSs9L8r1VJn8sogisyqnqiprW+0/
ePDowX4Ulzqeqm91rss4i6Df+3lZ1KtpJKNM1XFe6TLX1egIp4simCdP38ZZ
kcMS1tpGKzNVr6siGSr4n8lTnVdDZYuyKvWlhV/rpfyoSpPAp6RYrmL5sYTG
8Mnkmcn1UAFoy3i1Mvn8TRRd6bzW00ipRYHQLqpqZaeTydxUi3o2hs4TU8zn
MKqOl5M7cAGjlHpV/MxRJsbaGiDeUcvYZFNVFjNDjZ/M8QWOFsFHHntEjUdZ
PNPQVKemKkoDOI7iuloUJQA2glUpgN0C5cfqJQ5Eb5i6Z8VMl1URvC/K+VQd
GRg+ztRFGef2siiXcWWKXB3pVVxWS8L9MXw3ca6+La6AcviOuuvti8bPSVHn
FXIKdl9HUc5jXxEJ/nLw/GRKzYRV8YU6MPlnlXoel+/rlTqJ83kdz7X6XpcW
l7Q33qceKfDgVO0/2N8b7T0YPdijlx4J8DdiHJyWOlff6Hz0R/PehB8OM5hB
Pb0CgMPXx/l8DRxTqRe6Ct9fmDxWz//7P7NMl+H7lzFwcmasOsirIjdFHX58
qpfwTR2URWsoYL3YqvMlUJShj8u5rho2WsfLbAx0mdiVTiYA8Xh/Ag1PD85b
2Dpd6Rzl+hxamUuTMM0ejh+MH7RQtPfb0YPfjvZ/sw1FR3FZ6kw9N13Y/qBL
vVyrHxYwX5G8Dz8BeexCfRuXKYhYq9Nz816rszhbLWyRhx/OYHFncVVc2ffr
8P2r0qjzuDQpvPzD+emL0cnRaG+vBam8BuLv9SLs+vp6fP2QUHZxNvkRJgYB
29ubBBDbFsjflno+ByWYZSCmLXIaDcgYITEBMHW4iJegONrYutLqpMjnmV7L
is8Pv3v6/GBjxeo8WYB49K6Y1mjpu6e0p+F4US0zGRvw9uzwd/tfPoLn7y4u
XtLzo709JPGrs2N6fPjod0jcs6NnrTXAszos8kSvKqtAvaqDGWgkUJLqfJ1X
8Yd7oLJMLxmNMNb5xuAM3z2pAkMJwBOwGPllqAiOR0djo6vLEaJlFVeL0Sy2
9IUo//L0+MXF0zOC9TePSNbxPfHJCCRg+ilMMQL1O9nCXOplWSTaWjAV6iAD
EwcSuhTcvTyGTuffHRy2Vdb5Il5pi3hG3Jq8alTW59R69x6Ls4s4ySZ9Qotk
Pv2hPSU8q331g56pU2BT4OB1M+dRkdSom9UpaOkro6/vMXtxne2PCmmPq/hz
m9R/BqX8EVYOBgPzvzeB5tJ6NBqpWHguii4WoCVTt75UX4KAWVVdF84rgIdC
rcriyqRaWRggr0yiPKuA+gBJ7Fd6SKFA5Pw0dhzRKpYmTTONZhQcj7JI6wS7
RRGOJDOWVtW2jrNsrVgY19vWoCr9oQK7qYq6GhWXwKswu5/xcRRXagZmHjwX
hLjVFxCgbVKaGfhhMBBMbTX8ALidAoBJaW1WFZf4RZeXcaIZXYYG8TOpz63W
6uYGR4lNMnLLtbe3u2PBN/w300lcwzRtWNNC5WDl4uw6Xlt1FWe1Bv8jWQBR
wEmJ03iWNUSwwwjAdQNVC71WC1SDeaHe58A+OgXWg/V6hFU6WeTImgZIDJ7o
AnACTqFa6TLRIPSpAgNY57lGaQPdD0hHBy7TH2DhB+qyzjIPjgLfrSxgaepz
PZ6P1TVIJQooaiCQUMCEJvG0u7AoS1DBSsG7U9cAql0hNJGsParIwQEdjyMg
3VaNxANcDcQKMK1BJtZqiUuc68iaeU4cl1ewXJMnMLAF8FL0p924NCaCUldM
8lL/tTZgRoUZnxelRlFrTaYy6GUTUCSOLE4KYIa1IgoBdpkHYKETmEHUDTxG
NBRpdGwFLlox+xGYaBpVRZFZlaFBfk266A0t7zUokDcKPVF0nYnXkDY4JvKG
TqMAABII5EP4CBRnCUWMeUiBaPgasXtZFkt1DYoJvy3BJcyQc690VgDh7bir
AwRKGEpZgwMBrpNFnBu7hLWruKqQ6r1SCJ9dXGOZvcCFWSPRUnMJdCAVA44x
4IFw97qx029gHc+AnfWHGOccEil61YpI2GtwvN7sRoCJ4hondiIcrIAENXbI
RMTEqxjAB07VqFeI2zbli+GJ0NiluHZa5RtULa/RFYaVwtTo0ZEcu1YtRUex
xRfR9QJxza33EBc4L+IJYMvApNhqsxvgYWcH/Pk44zUfaWRx8HkKAwTuEgtl
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
zg/pDiEQxfn9rfrFN0fR/wCHtYzwHGYAAA==

-->

</rfc>
