<?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.17 (Ruby 3.1.3) -->
<?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-01" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.15.3 -->
  <front>
    <title>REST API Linked Data Keywords</title>
    <seriesInfo name="Internet-Draft" value="draft-polli-restapi-ld-keywords-01"/>
    <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="December" day="22"/>
    <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,
and support contract-first semantic schema design.</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"/>,
thus supporting a contract-first schema design.</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>Annotating a schema with semantic keywords
containing JSON-LD keywords
(e.g. <tt>@context</tt>, <tt>@type</tt> and <tt>@language</tt>)
may hinder its ability to be interpreted as a JSON-LD document
(e.g. using the <eref target="https://www.w3.org/2019/wot/json-schema#json-ld11-ctx">JSON-LD 1.1 context for the JSON Schema vocabulary</eref>);
this can be mitigated extending that context and specifying
that Linked Data keywords are JSON Literals.</t>
      <sourcecode type="json"><![CDATA[
{ "@context": {
    "x-jsonld-context: { "@type": "@json"},
    "x-jsonld-type: { "@type": "@json"}
  }
}
]]></sourcecode>
      <t>This is generally not a problem, since a generic
<xref target="JSONSCHEMA"/> document cannot be reliably interpreted
as JSON-LD using a single context: this is because the same
JSON member keys can have different meanings depending
on their JSON Schema position (see <eref target="https://www.w3.org/2019/wot/json-schema#interpreting-json-schema-as-json-ld-1-1">the notes in the  Interpreting JSON Schema as JSON-LD 1.1</eref> section of <xref target="JSON-SCHEMA-RDF"/>).</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>Limited composability can be achieved applying the process described
in <xref target="interpreting"/>.
Automatic composability is not an explicit goal of this specification
because of its complexity. One of the issue is that
the meaning of a JSON-LD keyword is affected by
their position. For example, <tt>@type</tt>:</t>
        <ul spacing="normal">
          <li>in a node object, adds an <tt>rdf:type</tt> arc to the RDF graph
(it also has a few other effects on processing, e.g. by enabling type-scoped contexts)</li>
          <li>in a value object, specifies the datatype of the produced literal</li>
          <li>in the context, and more precisely in a term definition,
specifies <eref target="https://www.w3.org/TR/json-ld11/#type-coercion">type coercion</eref>.
It only applies when the value of the term is a string.</li>
        </ul>
        <t>These issues can be tackled in future versions of this specifications.</t>
        <t>Moreover, 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" initials="S." surname="Gössner">
              <organization>Fachhochschule Dortmund</organization>
            </author>
            <author fullname="Glyn Normington" initials="G." surname="Normington">
         </author>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="21" month="November" year="2022"/>
            <abstract>
              <t>   JSONPath defines a string syntax for selecting and extracting JSON
   (RFC 8259) values from a JSON value.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-jsonpath-base-08"/>
        </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="JSON-SCHEMA-RDF" target="https://www.w3.org/2019/wot/json-schema/">
          <front>
            <title>JSON Schema in RDF</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"/> to be used at contract time.</t>
        </dd>
        <dt>Q: Does this document support the exchange of JSON-LD resources?</dt>
        <dd>
          <t>This document is focused on annotating schemas that are used
at contract/design time, so that application can exchange compact
JSON object without dereferencing nor interpreting
external resources at runtime.
</t>
          <t>While you can use the provided semantic information to generate
JSON-LD objects, it is not the primary goal of this specification:
context information are not expected to be dereferenced at runtime
(see security considerations in JSON-LD)
and the semantics of exchanged messages is expected
to be constrained inside the application.</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 considers invalid 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>
        <dt>Q: Why don't design for composability first?</dt>
        <dd>
          <t>JSON-LD is a complex specification.
~~~ yaml
 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"
~~~
</t>
          <t>For this reason, composability is limited to the object level.</t>
        </dd>
      </dl>
    </section>
    <section numbered="false" removeInRFC="true" anchor="change-log">
      <name>Change Log</name>
      <t>TBD</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
zaXiHEtEnIUA4C/BB8qEPJMs/TdkrkvwYVKMZ2FhuxEH71fQqK44jRKXpoLQ
T2wMpqLgg2HFmxRgkiBe8pxgGMD6wLKbUelk5MbknYyvMJl3n9YKrGe0BMvM
W0TonIE3wvpSs0hfLJAl2ictOigL5F6kLheSYB58GFWk4mvOeCGxFJimEmsT
NLv9tDeyKoxEdEndxBn4i5IfHgf5f9zzaLK0hUM1Oay+QbNtVXYl1GjcDgWF
WhBpDWhVRE4tTh3i6u5OvwOf2MW9mGMqmsrGpG5bCUMajMG37XH16EGIN5CD
AnXYRxZP37NqYs4L+xG7Rg7MDkfjQp02FZFr9U0PbKB32iDFwyiIPephqsbC
wd5++oEdeOQ72saf7Mgu3Mj2q3aHVmij3sSqxXgk6VRvQdCzqTk2cdgu8l6U
2rTXPVi1mrSDWNu7g1tEno9f2ZJKw5TGh1HseVlRnIAgcyJBnI9Aj6Pv1cn5
eVpuC/7bYpIdBxLMwCF6XNlQfZdIbfcrrZ6N8btJN/w11CiRg+XJeO/zjwZG
UDpq91+r3Qih+B7dMItwNjK8PStqDFYxCjKnoMqIbTQ68uz72e7Cud4eg3Ux
kWgb+eqnGCxcURWeYdHY4ABD/si3ZyeSahuiGZGcsBaGCG0hqy/sgRCKSxyF
urDdLtVh2jKLE8rhdZKTm+7IlqzRcj2WJhOrK8fcddCT43TFbnd+NhGEoU2f
bsyseqbiDJVMdH9qdWbKerGyS8W/XwNyYBU7E0LAoJOgOmSmADFBrMqklZW+
yrMzotqXkpZqyszCjQ7zzg6XcYpIbHpmd4HI2GyWaDBn4IkjbDYG0xTXV1mb
4bJpza4n1Yo9EHxvrHReYcLc2jpFQhFnG/2cLyMmGDEW5+t+0+88LcoS417r
VVPStpuvtnrdg6cIVE9yzflubnuCVQbIUpc3aFJCmd0H8he26TRO6T2p8yIX
VNieoN3nGW59BVB1/NYPgIQtqbOpWVSxCgE3wR0UbhTa1g8CJXCZuX6Oszbs
pVfNTAqi/JSiKG47GPMzexroeWQ3yGjI3hVXPPFG0EIn19JPV2Re/ZqPdluM
oLDRRLC24XasWFuCxbey2G0jCSWGfm62rroeTJ+W48VQCE0OmHWU4wz32Ney
sFomtkQg19KWPZicM3+wdLDhiEzoUHLC/MIzhjCmVLZRjOn5XC3tqz5+jAQI
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
h+w1nRTzh3uxF18dRf8DijzsneRuAAA=

-->

</rfc>
