diff --git a/spec/index.html b/spec/index.html index 2a9cc3e..a2274a0 100644 --- a/spec/index.html +++ b/spec/index.html @@ -1295,23 +1295,35 @@
+ In the cases described above, one of the possible expressive methods is a + specific feature of YAML language. To leverage those methods, we propose an + Extended YAML-LD Profile which will implement all such features. +
+@type
In RDF, @type
translates to one of the following:
+ When converting JSON-LD to RDF, @type
translates to
+ one of the following:
+
rdf:type
edgedatatype
mark for a Literal nodedatatype
mark for a Literal
nodePossible ways to specify this in YAML-LD are the following:
@context
, where we can only say that the node is an IRIrdfs:domain
property
+ In the @context
, but there we can only say that the node is an IRI,
+ we cannot specify a particular rdf:type
+ rdfs:domain
or rdfs:range
properties
@type
keyword@type
Here, %TAG
declares the !xsd:
prefix for tags used
in the document. YAML treats tags as IRIs, which brings it close to the LD family
- of data formatting tools. Note that the directives section must be separated
+ of data formats. Note that the directives section must be separated
from the main document with ---
(a line containing exactly three hyphens).
@id
@id
, and then address it by the given identifier
+ Use YAML anchors & aliases @@ -1377,979 +1392,1003 @@
…
- -- this document also defines a means of extending the - JSON-LD internal representation to allow a more complete expression - of native data types within YAML-LD, and allows use of the complete - [[[JSON-LD11-API]]] [[JSON-LD11-API]] - - Application Programming Interface - - to manipulate extended YAML-LD documents. -
- -- A YAML-LD document complies with - the YAML-LD extended profile of this specification - if it follows the normative statements from this specification - and can be transformed into the - JSON-LD extended internal representation, - then back to a conforming YAML-LD document, - without loss of semantic information. -
- -- As [[YAML]] has well-defined representation requirements, - all YAML-LD streams MUST form a - - well-formed stream - - and use alias node defined by a previous node - with a corresponding anchor; - otherwise, a - loading-document-failed - error has been detected and processing is aborted. -
- -- The YAML-LD extended profile allows full use of - anchor names and alias nodes subject to - the requirements described above in this section. -
- -- If the {{JsonLdOptions/extendedYAML}} API flag is `true`, the processing result - will be in the extended internal representation. -
- -- When processing using the YAML-LD JSON profile, - documents MUST NOT contain alias nodes; - otherwise, a - profile-error - error has been detected and processing is aborted. -
++ Two alternative approaches have been proposed to implement the Extended profile: +
-YAML-LD processing is defined by converting YAML to the - internal representation and using [[[JSON-LD11-API]]] - to process on that representation, - after which the representation is converted back to YAML. - As information specific to a given YAML document structure is lost - in this transformation, much of the specifics of that - original representation are therefore lost in that conversion, - limiting the ability to fully round-trip a YAML-LD document back - to an equivalent representation. - Consequently, round-tripping in this context is limited to preservation of the semantic - representation of a document, - rather than a specific syntactic representation.
- -A YAML flow sequence:
-- -- - -
The conversion process represented here is compatible with - the description of - "Composing the Representation Graph" from the - 3.1.2 Load section of [[YAML]]. - The steps described below for converting to the - internal representation operate upon that - . -
+When operating using the YAML-LD JSON profile, - it is intended that the common feature provided by most - YAML libraries of transforming YAML directly to JSON - satisfies the requirements for parsing a YAML-LD file. +
+ This approach implies extending the + JSON-LD internal representation to allow a more complete expression + of native data types within YAML-LD, and allows use of the complete + [[[JSON-LD11-API]]] [[JSON-LD11-API]] + + Application Programming Interface + + to manipulate extended YAML-LD documents.
-- As a developer, - I want to be able to convert JSON-LD documents to YAML-LD by simply serializing the document using any - standard YAML library, - So that the resulting YAML is valid YAML-LD, resolving to the same graph as the original JSON-LD. +
+ A YAML-LD document complies with + the YAML-LD extended profile of this specification + if it follows the normative statements from this specification + and can be transformed into the + JSON-LD extended internal representation, + then back to a conforming YAML-LD document, + without loss of semantic information.
-A YAML stream is composed of zero or more YAML documents.
- -- YAML streams may correspond more directly to - [[[RFC7464]]], which are not presently part of the - JSON-LD representation model. - The description here more closely aligns with how JSON-LD - interprets HTML Scripts. -
- -- Any error reported in a recursive processing step MUST result - in the failure of this processing step.
-From the YAML grammar, - a YAML document MAY be preceded by a - Document Prefix - and/or a set of - directives - followed by a - YAML bare document, - which is composed of a single node. -
- -+ The YAML-LD extended profile allows full use of + anchor names and alias nodes subject to + the requirements described above in this section. +
- -+ If the {{JsonLdOptions/extendedYAML}} API flag is `true`, the processing result + will be in the extended internal representation. +
-- Any error reported in a recursive processing step MUST result - in the failure of this processing step.
-Both block sequences and flow sequences - are directly aligned with - an array in the internal representation.
+YAML-LD processing is defined by converting YAML to the + internal representation and using [[[JSON-LD11-API]]] + to process on that representation, + after which the representation is converted back to YAML. + As information specific to a given YAML document structure is lost + in this transformation, much of the specifics of that + original representation are therefore lost in that conversion, + limiting the ability to fully round-trip a YAML-LD document back + to an equivalent representation. + Consequently, round-tripping in this context is limited to preservation of the semantic + representation of a document, + rather than a specific syntactic representation.
+ + + +The conversion process represented here is compatible with + the description of + "Composing the Representation Graph" from the + 3.1.2 Load section of [[YAML]]. + The steps described below for converting to the + internal representation operate upon that + . +
-- Any error reported in a recursive processing step MUST result - in the failure of this processing step.
-When operating using the YAML-LD JSON profile, + it is intended that the common feature provided by most + YAML libraries of transforming YAML directly to JSON + satisfies the requirements for parsing a YAML-LD file. +
-+ As a developer, + I want to be able to convert JSON-LD documents to YAML-LD by simply serializing the document using any + standard YAML library, + So that the resulting YAML is valid YAML-LD, resolving to the same graph as the original JSON-LD. +
-Both block mappings and flow mappings - are directly aligned with - a map in the internal representation.
+A YAML stream is composed of zero or more YAML documents.
-- Any error reported in a recursive processing step MUST result - in the failure of this processing step.
-+ YAML streams may correspond more directly to + [[[RFC7464]]], which are not presently part of the + JSON-LD representation model. + The description here more closely aligns with how JSON-LD + interprets HTML Scripts. +
-+ Any error reported in a recursive processing step MUST result + in the failure of this processing step.
+- Implementations may retain the - representation as an YAML Integer, - or YAML Floating Point, - but a JSON-LD processor must treat them uniformly - as a number, although the specific type of number - value SHOULD be retained for round-tripping. -
-From the YAML grammar, + a YAML document MAY be preceded by a + Document Prefix + and/or a set of + directives + followed by a + YAML bare document, + which is composed of a single node. +
-- The conversion result is the value of the entry - in the |named nodes| map having the node entry. - If none exist, the document is invalid, - and processing MUST end in failure. -
++ Any error reported in a recursive processing step MUST result + in the failure of this processing step.
+- If an alias node is encountered when processing the - YAML representation graph - and the {{JsonLdOptions/extendedYAML}} flag is `false`, - the YAML-LD JSON profile has been selected. - A profile-error - error has been detected and processing MUST be aborted. -
+- If a cycle is detected, - a processing error MUST be returned, - and processing aborted. -
-Both block sequences and flow sequences + are directly aligned with + an array in the internal representation.
-The conversion process from the internal representation - involves turning that representation back into a YAML - representation graph - and relies on the description of - "Serializing the Representation Graph" from the - 3.1.1 Dump section of [[YAML]] - for the final serialization. -
++ Any error reported in a recursive processing step MUST result + in the failure of this processing step.
+- As the internal representation is rooted by either - an array or a map, - the process of transforming the internal representation - to YAML begins by preparing an empty representation graph - which will be rooted with either a - YAML mapping or YAML sequence. -
+- Although outside of the scope of this specification, - processors MAY use - YAML directives, including TAG directives, and - Document markers, - as appropriate for best results. - Specifically, if the {{JsonLdOptions/extendedYAML}} API flag is `true`, - the document SHOULD use the `%YAML` directive with - version set to at least `1.2`. - To improve readability and reduce document size, - the document MAY use a `%TAG` directive appropriate for - RDF literals contained within the representation. -
+Both block mappings and flow mappings + are directly aligned with + a map in the internal representation.
-- The use of `%TAG` directives in YAML-LD is similar to the use - of the `PREFIX` directive in [[?Turtle]] - or the general use of terms as prefixes to create - Compact IRIs in [[JSON-LD11]]: - they not change the meaning of the encoded scalars. -
++ Any error reported in a recursive processing step MUST result + in the failure of this processing step.
+- -+
- Although allowed within the YAML Grammar, some current YAML parsers - do not allow the use of `"#"` within a tag URI. Substituting - the `"%23"` escape is a workaround for this problem, that will - hopefully become unnecessary as implementations are updated. -
++ Implementations may retain the + representation as an YAML Integer, + or YAML Floating Point, + but a JSON-LD processor must treat them uniformly + as a number, although the specific type of number + value SHOULD be retained for round-tripping. +
+A concrete proposal in that direction would be to use a tag at the - top-level of any "idiomatic" YAML-LD document, applying to the whole - object/array that makes the document.
+It might also include a version - to identify the specification that it relates to, allowing - for version announcement that could be used for future-proofing.
++ The conversion result is the value of the entry + in the |named nodes| map having the node entry. + If none exist, the document is invalid, + and processing MUST end in failure. +
-The following block is one example:
++ If an alias node is encountered when processing the + YAML representation graph + and the {{JsonLdOptions/extendedYAML}} flag is `false`, + the YAML-LD JSON profile has been selected. + A profile-error + error has been detected and processing MUST be aborted. +
-- !yaml-ld - $context: http://schema.org/ - $type: Person - name: Pierre-Antoine Champin --
+ If a cycle is detected, + a processing error MUST be returned, + and processing aborted. +
+See for an example - of serializing the extended internal representation.
+The conversion process from the internal representation + involves turning that representation back into a YAML + representation graph + and relies on the description of + "Serializing the Representation Graph" from the + 3.1.1 Dump section of [[YAML]] + for the final serialization. +
- This algorithm describes the steps to convert - each element from the internal representation - into corresponding YAML nodes by recursively - processing each element |n|. + As the internal representation is rooted by either + an array or a map, + the process of transforming the internal representation + to YAML begins by preparing an empty representation graph + which will be rooted with either a + YAML mapping or YAML sequence.
-+ Although outside of the scope of this specification, + processors MAY use + YAML directives, including TAG directives, and + Document markers, + as appropriate for best results. + Specifically, if the {{JsonLdOptions/extendedYAML}} API flag is `true`, + the document SHOULD use the `%YAML` directive with + version set to at least `1.2`. + To improve readability and reduce document size, + the document MAY use a `%TAG` directive appropriate for + RDF literals contained within the representation. +
-+ The use of `%TAG` directives in YAML-LD is similar to the use + of the `PREFIX` directive in [[?Turtle]] + or the general use of terms as prefixes to create + Compact IRIs in [[JSON-LD11]]: + they not change the meaning of the encoded scalars. +
-This section identifies two application profiles for operating with - YAML-LD:
-+ +-
Application profiles allow publishers to use YAML-LD - either for maximum interoperability, - or for maximum expressivity. - The YAML-LD JSON profile provides for complete round-tripping - between YAML-LD documents and JSON-LD documents. - The YAML-LD extended profile allows for - fuller use of YAML features to enhance the ability to - represent a larger number of native datatypes - and reduce document redundancy.
++ Although allowed within the YAML Grammar, some current YAML parsers + do not allow the use of `"#"` within a tag URI. Substituting + the `"%23"` escape is a workaround for this problem, that will + hopefully become unnecessary as implementations are updated. +
+A concrete proposal in that direction would be to use a tag at the + top-level of any "idiomatic" YAML-LD document, applying to the whole + object/array that makes the document.
-Application profiles can be set using the {{JsonLdProcessor}} - API interface, as well as an HTTP request profile (see ).
+It might also include a version + to identify the specification that it relates to, allowing + for version announcement that could be used for future-proofing.
-The following block is one example:
-- The YAML-LD JSON profile - is based on the YAML Core Schema, - which interprets only a limited set of node tags. - YAML scalars with node tags outside of the defined range - SHOULD be avoided and MUST be converted to the closest - scalar type from the YAML Core Schema, - if found. - See - for specifics. -
++ !yaml-ld + $context: http://schema.org/ + $type: Person + name: Pierre-Antoine Champin ++
See for an example + of serializing the extended internal representation.
-- Keys used in a YAML mapping MUST be strings. -
+- Although YAML-LD documents MAY include node anchors, - documents MUST NOT use alias nodes. -
++ This algorithm describes the steps to convert + each element from the internal representation + into corresponding YAML nodes by recursively + processing each element |n|. +
-- A YAML stream MUST include only a single YAML document, - as the JSON-LD internal representation only supports - a single document model. -
+- The YAML-LD extended profile - extends the YAML Core Schema, - allowing node tags to specify RDF literals - by using a JSON-LD extended internal representation capable - of directly representing RDF literals. -
+This section identifies two application profiles for operating with + YAML-LD:
+- As with the YAML-LD JSON profile, - YAML-LD documents in the YAML-LD extended profile - MUST NOT use encodings other than UTF-8. -
+Application profiles allow publishers to use YAML-LD + either for maximum interoperability, + or for maximum expressivity. + The YAML-LD JSON profile provides for complete round-tripping + between YAML-LD documents and JSON-LD documents. + The YAML-LD extended profile allows for + fuller use of YAML features to enhance the ability to + represent a larger number of native datatypes + and reduce document redundancy.
-- As with the YAML-LD JSON profile, - keys used in a YAML mapping MUST be strings. -
-- YAML-LD docucments MAY use alias nodes, - as long as dereferencing these aliases does not result in a loop. -
+Application profiles can be set using the {{JsonLdProcessor}} + API interface, as well as an HTTP request profile (see ).
-- As with the YAML-LD JSON profile, - a YAML stream MUST include only a single YAML document, - as the JSON-LD extended internal representation only supports - a single document model. -
+- Consier something like `!id` as a local tag to denote IRIs. -
++ The YAML-LD JSON profile + is based on the YAML Core Schema, + which interprets only a limited set of node tags. + YAML scalars with node tags outside of the defined range + SHOULD be avoided and MUST be converted to the closest + scalar type from the YAML Core Schema, + if found. + See + for specifics. +
-- This specification defines - the - JSON-LD extended internal representation - , an extension - of the JSON-LD internal representation. + Keys used in a YAML mapping MUST be strings.
- In addition to maps, arrays, and strings, - the internal representation allows native representation - of numbers, boolean values, and nulls. - The extended internal representation allows for native - representation of RDF literals, both - with a datatype IRI, - and language-tagged strings. + Although YAML-LD documents MAY include node anchors, + documents MUST NOT use alias nodes.
- When transforming from the extended internal representation - to the internal representation — - for example when serializing to JSON - or to the YAML-LD JSON profile — - implementations MUST transform RDF literals to the closest - native representation of the internal representation: + A YAML stream MUST include only a single YAML document, + as the JSON-LD internal representation only supports + a single document model.
+- An alternative would be to transform such literals to - JSON-LD value objects, - and we may want to provide a means of transforming between - the internal representation - and extended internal representation - using value objects, - but this treatment is consistent with - [[YAML]] Core Schema - Tag Resolution. +
+ The YAML-LD extended profile + extends the YAML Core Schema, + allowing node tags to specify RDF literals + by using a JSON-LD extended internal representation capable + of directly representing RDF literals.
-+ As with the YAML-LD JSON profile, + YAML-LD documents in the YAML-LD extended profile + MUST NOT use encodings other than UTF-8. +
-- This specification extends the [[[JSON-LD11-API]]] [[JSON-LD11-API]] - - Application Programming Interface - - and the [[[JSON-LD11-FRAMING]]] [[JSON-LD11-FRAMING]] - - Application Programming Interface - - to manage the serialization and deserialization of [[YAML]] - and to enable an option for setting the - YAML-LD extended profile. -
++ As with the YAML-LD JSON profile, + keys used in a YAML mapping MUST be strings. +
-+ YAML-LD docucments MAY use alias nodes, + as long as dereferencing these aliases does not result in a loop. +
-- The - JSON-LD Processor - interface is the high-level programming structure that developers - use to access the JSON-LD transformation methods. - The updates below is an experimental - extension of the {{JsonLdProcessor}} interface defined in the - JSON-LD 1.1 API [[JSON-LD11-API]] - to serialize output as YAML rather than JSON. -
++ As with the YAML-LD JSON profile, + a YAML stream MUST include only a single YAML document, + as the JSON-LD extended internal representation only supports + a single document model. +
-- Otherwise, if both the {{JsonLdOptions/useNativeTypes}} - and {{JsonLdOptions/extendedYAML}} flags are set - and the - datatype IRI - of |value| is not `xsd:string`: ---
-- - If |value| is a language-tagged string - set |converted value| to a new RDF literal - composed of the - lexical form - of |value| and - datatype IRI - composed of `https://www.w3.org/ns/i18n#` followed by - the - language tag - of |value|. -
-- - Otherwise, et |converted value| to |value|. -
-
---
-- - Otherwise, if |value| is an RDF literal, - |value| is left unmodified. - - This will only be the case when processing a value from an - extended internal representation. - -
-
+ Consier something like `!id` as a local tag to denote IRIs. +
-The {{JsonLdOptions}} type is used to pass various options to the - {{JsonLdProcessor}} methods.
+- partial dictionary JsonLdOptions { - boolean extendedYAML = false; - }; -+
+ This specification defines + the + JSON-LD extended internal representation + , an extension + of the JSON-LD internal representation. +
-- In addition to those options defined in the - JSON-LD 1.1 API [[JSON-LD11-API]] - and JSON-LD 1.1 Framing [[JSON-LD11-FRAMING]], - this specification defines these additional options: -
++ In addition to maps, arrays, and strings, + the internal representation allows native representation + of numbers, boolean values, and nulls. + The extended internal representation allows for native + representation of RDF literals, both + with a datatype IRI, + and language-tagged strings. +
-+ When transforming from the extended internal representation + to the internal representation — + for example when serializing to JSON + or to the YAML-LD JSON profile — + implementations MUST transform RDF literals to the closest + native representation of the internal representation: +
+ An alternative would be to transform such literals to + JSON-LD value objects, + and we may want to provide a means of transforming between + the internal representation + and extended internal representation + using value objects, + but this treatment is consistent with + [[YAML]] Core Schema + Tag Resolution. +
+This section describes an update to the - built-in {{LoadDocumentCallback}} - to load YAML streams and documents - into the internal representation, - or into the extended internal representation - if the {{JsonLdOptions/extendedYAML}} API flag is `true`.
+- The {{LoadDocumentCallback}} algorithm in [[JSON-LD11-API]] - is updated as follows: + This specification extends the [[[JSON-LD11-API]]] [[JSON-LD11-API]] + + Application Programming Interface + + and the [[[JSON-LD11-FRAMING]]] [[JSON-LD11-FRAMING]] + + Application Programming Interface + + to manage the serialization and deserialization of [[YAML]] + and to enable an option for setting the + YAML-LD extended profile.
-- These updates are intended to be compatible with other updates - to the {{LoadDocumentCallback}}, such as - Process HTML - as defined in [[JSON-LD11-API]]. -
-+ The + JSON-LD Processor + interface is the high-level programming structure that developers + use to access the JSON-LD transformation methods. + The updates below is an experimental + extension of the {{JsonLdProcessor}} interface defined in the + JSON-LD 1.1 API [[JSON-LD11-API]] + to serialize output as YAML rather than JSON. +
-The YamlLdErrorCode represents the collection of valid YAML-LD error codes, - which extends the {{JsonLdErrorCode}} definitions.
- -- enum YamlLdErrorCode { - "invalid-encoding", - "mapping-key-error", - "profile-error" - }; -+
+ Otherwise, if both the {{JsonLdOptions/useNativeTypes}} + and {{JsonLdOptions/extendedYAML}} flags are set + and the + datatype IRI + of |value| is not `xsd:string`: +++
+- + If |value| is a language-tagged string + set |converted value| to a new RDF literal + composed of the + lexical form + of |value| and + datatype IRI + composed of `https://www.w3.org/ns/i18n#` followed by + the + language tag + of |value|. +
+- + Otherwise, et |converted value| to |value|. +
+
+++
+- + Otherwise, if |value| is an RDF literal, + |value| is left unmodified. + + This will only be the case when processing a value from an + extended internal representation. + +
+
The {{JsonLdOptions}} type is used to pass various options to the + {{JsonLdProcessor}} methods.
+ ++ partial dictionary JsonLdOptions { + boolean extendedYAML = false; + }; ++ +
+ In addition to those options defined in the + JSON-LD 1.1 API [[JSON-LD11-API]] + and JSON-LD 1.1 Framing [[JSON-LD11-FRAMING]], + this specification defines these additional options: +
+ +This section describes an update to the + built-in {{LoadDocumentCallback}} + to load YAML streams and documents + into the internal representation, + or into the extended internal representation + if the {{JsonLdOptions/extendedYAML}} API flag is `true`.
+ ++ The {{LoadDocumentCallback}} algorithm in [[JSON-LD11-API]] + is updated as follows: +
+ ++ These updates are intended to be compatible with other updates + to the {{LoadDocumentCallback}}, such as + Process HTML + as defined in [[JSON-LD11-API]]. +
+The YamlLdErrorCode represents the collection of valid YAML-LD error codes, + which extends the {{JsonLdErrorCode}} definitions.
+ ++ enum YamlLdErrorCode { + "invalid-encoding", + "mapping-key-error", + "profile-error" + }; ++ +