<?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.35 (Ruby 3.2.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-02" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.3 -->
  <front>
    <title>REST API Linked Data Keywords</title>
    <seriesInfo name="Internet-Draft" value="draft-polli-restapi-ld-keywords-02"/>
    <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="2023" month="June" day="24"/>
    <area>General</area>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 92?>

<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>
    <?line 99?>

<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.
<?line -8?>
        </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"/>
            <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"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <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"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <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"/>
            <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"/>
            <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="10" month="June" year="2023"/>
            <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-14"/>
        </reference>
        <reference anchor="JSON-POINTER">
          <front>
            <title>JavaScript Object Notation (JSON) Pointer</title>
            <author fullname="P. Bryan" initials="P." role="editor" surname="Bryan"/>
            <author fullname="K. Zyp" initials="K." surname="Zyp"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <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>
    <?line 526?>

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

-->

</rfc>
