Skip to content
Closed
Show file tree
Hide file tree
Changes from 9 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# JetBrains IDEs
.idea/
154 changes: 141 additions & 13 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,48 @@
text-decoration: none;
color: #666;
}

table.simple {
border-collapse: collapse;
width: 100%;
font-size: 14px;
}

table.simple th,
table.simple td {
border: 1px solid #ddd;
padding: 8px;
vertical-align: top; /* Align text to the top */
}

table.simple th {
background-color: #f2f2f2; /* Light gray for headers */
font-weight: bold;
text-align: left;
}

table.simple tr:nth-child(even) {
background-color: #f9f9f9; /* Alternating row colors */
}

table.simple tr:hover {
background-color: #e9e9e9; /* Highlight on hover */
}

table.simple a {
color: #1a73e8; /* Make links a visible color */
text-decoration: none;
}

table.simple a:hover {
text-decoration: underline;
}

table.simple td.error {
background-color: #FFA500;
color: #000;
font-weight: bold;
}
</style>
</head>

Expand Down Expand Up @@ -5156,17 +5198,89 @@ <h3>Overview</h3>
and generating a JSON-LD document in expanded form for all
<a>RDF literals</a>, <a>IRIs</a>
and <a>blank node identifiers</a>.
If the <a data-link-for="JsonLdOptions">useNativeTypes</a> flag is set to <code>true</code>,
<a>RDF literals</a> with a
<a>datatype IRI</a>
that equals <code>xsd:integer</code> or <code>xsd:double</code> are converted
to a <a>JSON numbers</a> and <a>RDF literals</a>
with a <a>datatype IRI</a>
that equals <code>xsd:boolean</code> are converted to <code>true</code> or
<code>false</code> based on their
<a>lexical form</a>
as described in
<a class="sectionRef" href="#data-round-tripping"></a>.

If the <a data-link-for="JsonLdOptions">useNativeTypes</a> flag is set
to <code>true</code>, <a>RDF literals</a> are converted to JSON values
based on their <a>datatype IRI</a> and <a>lexical form</a> as described
in <a class="sectionRef" href="#algorithm"></a>.
</p>

<table class="simple">
<thead>
<th>RDF datatype</th>
<th>RDF Literal</th>
<th>JSON</th>
</thead>
<tbody>
<tr>
<th>(<em>None</em>, implying <code>xsd:string</code>)</th>
<td rowspan="2">An RDF string literal</td>
<td rowspan="2">JSON string literal</td>
</tr>
<tr>
<th><code>xsd:string</code></th>
</tr>

<tr>
<th rowspan="3"><code>xsd:integer</code></th>
<td>Whole number in the <code>[-2<sup>53</sup> + 1, 2<sup>53</sup> + 1]</code> range, representable as per [[IEEE-754-2008]]</td>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are more constraints in the lexical form of an xsd:integer than this.

Also, while it's likely consistent with JCS/ECMAScript, such numbers also need to be representable as integers in JCS/ECMAScript. See Appendix B.
We should be careful to not mis-describe this, and just refer to XSD Datatypes 1.1 and JCS.

<td><a>JSON Number</a></td>
</tr>

<tr>
<td>Whole number out of that range</td>
<td>JSON string literal</td>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually, this needs to be serialized as a value object with @type. The integer 1e54 (1000000000000000078291540404596243842305360299886116864) is outside of that range, but the value object needs to include `"@type": "xsd:integer".

</tr>

<tr>
<td>Any other value</td>
<td class="error">Throw <a data-link-for="JsonLdErrorCode">invalid JSON literal</a></td>
</tr>
Comment on lines +5235 to +5238
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think that is a good idea, but I'll comment on that in the algorithm itself, below.


<tr>
<th rowspan="4"><code>xsd:double</code></th>
<td>Real number in the <code>[-2<sup>53</sup> + 1, 2<sup>53</sup> + 1]</code> range, representable as per [[IEEE-754-2008]]</td>
<td><a>JSON Number</a></td>
</tr>

<tr>
<td>Real number out of that range</td>
<td>JSON string literal</td>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See above comment; the ranges should be consistent with XSD and JCS and probably shouldn't re-define the criteria.

</tr>

<tr>
<td>
Non-numeric values:

<ul>
<li><code>"NaN"^^xsd:double</code>,</li>
<li><code>"+INF"^^xsd:double</code>,</li>
<li><code>"-INF"^^xsd:double</code></li>
</ul>
</td>
<td class="error" rowspan="2">Throw <a data-link-for="JsonLdErrorCode">invalid JSON literal</a></td>
</tr>
Comment on lines +5261 to +5262
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same as above; I don't think that is a good idea, see my comments in the algorithm.

<tr>
<td>Any other value</td>
</tr>

<tr>
<th rowspan="3"><code>xsd:boolean</code></th>
<td><code>true</code></td>
<td><code>true</code></td>
</tr>
<tr>
<td><code>false</code></td>
<td><code>false</code></td>
</tr>
<tr>
<td>Any other value</td>
<td class="error">Throw <a data-link-for="JsonLdErrorCode">invalid JSON literal</a></td>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is not what the algorithm is saying!

</tr>
</tbody>
</table>

<p>
Unless the <a data-link-for="JsonLdOptions">useRdfType</a> flag is set to true, <code>rdf:type</code>
predicates will be serialized as <code>@type</code> as long as the associated object is
either an <a>IRI</a> or <a>blank node identifier</a>.</p>
Expand Down Expand Up @@ -5477,10 +5591,24 @@ <h3>Algorithm</h3>
<code>xsd:double</code> and its
<a>lexical form</a>
is a valid <code>xsd:integer</code> or <code>xsd:double</code>
according [[XMLSCHEMA11-2]], set <var>converted value</var>
according to [[XMLSCHEMA11-2]], and if it is a numeric value
conformant to [[IEEE-754-2008]], then set <var>converted value</var>
to the result of converting the
<a>lexical form</a>
to a JSON <a>number</a>.</li>
to a JSON <a>number</a>.
</li>
<li>
Otherwise, if <a>lexical form</a> expresses a numerical value
outside of the range mandated by [[IEEE-754-2008]], then set
<var>converted value</var> to a JSON string literal containing
said lexical form.
</li>
<li>
Otherwise, if <a>lexical form</a> expresses a non-numeric value,
such as <code>"+INF"^^xsd:double</code>, an
<a data-link-for="JsonLdErrorCode">invalid JSON literal</a>
error has been detected and processing is aborted.
</li>
</ol>
</li>
<li class="changed">Otherwise, if <a>processing mode</a> is not `json-ld-1.0`,
Expand Down
20 changes: 20 additions & 0 deletions tests/fromRdf-manifest.jsonld
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,26 @@
"purpose": "Check list generation with rdf:first property and rdf:nil value.",
"input": "fromRdf/0026-in.nq",
"expect": "fromRdf/0026-out.jsonld"
}, {
"@id": "#t0027",
"@type": ["jld:PositiveEvaluationTest", "jld:FromRDFTest"],
"name": "native types flag set to true is ignored if the number provided is invalid in JSON",
"purpose": "Literals with datatype xsd:boolean, xsd:integer, and xsd:double are serialized using native scalar values if possible",
"option": {
"useNativeTypes": true
},
"input": "fromRdf/0027-in.nq",
"expect": "fromRdf/0027-out.jsonld"
}, {
"@id": "#t0028",
"@type": ["jld:NegativeEvaluationTest", "jld:FromRDFTest"],
"name": "native types flag set to true is ignored if the number provided is invalid in JSON",
"purpose": "+INF^^xsd:double causes a failure to serialize in JSON.",
"option": {
"useNativeTypes": true
},
"input": "fromRdf/0028-in.nq",
"expectErrorCode": "invalid JSON literal"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is not invalid, it just can't be serialized as a native value.

}, {
"@id": "#tdi01",
"@type": [ "jld:PositiveEvaluationTest", "jld:FromRDFTest" ],
Expand Down
5 changes: 5 additions & 0 deletions tests/fromRdf/0027-in.nq
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<http://example.com/Subj1> <http://example.com/prop> "true"^^<http://www.w3.org/2001/XMLSchema#boolean> .
<http://example.com/Subj1> <http://example.com/prop> "false"^^<http://www.w3.org/2001/XMLSchema#boolean> .
<http://example.com/Subj1> <http://example.com/prop> "1"^^<http://www.w3.org/2001/XMLSchema#integer> .
<http://example.com/Subj1> <http://example.com/prop> "1.1"^^<http://www.w3.org/2001/XMLSchema#decimal> .
<http://example.com/Subj1> <http://example.com/prop> "0.1e999999999999999"^^<http://www.w3.org/2001/XMLSchema#double> .
12 changes: 12 additions & 0 deletions tests/fromRdf/0027-out.jsonld
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
[
{
"@id": "http://example.com/Subj1",
"http://example.com/prop": [
{ "@value": true },
{ "@value": false },
{ "@value": 1 },
{ "@value": "1.1", "@type": "http://www.w3.org/2001/XMLSchema#decimal"},
{ "@value": "0.1e999999999999999", "@type": "http://www.w3.org/2001/XMLSchema#double"}
]
}
]
1 change: 1 addition & 0 deletions tests/fromRdf/0028-in.nq
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<http://example.com/Subj1> <http://example.com/prop> "+INF"^^<http://www.w3.org/2001/XMLSchema#double> .
Loading