You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@jena.apache.org by Erich Bremer <er...@ebremer.com> on 2020/03/04 00:10:20 UTC
JSONLD and base URL
I'm trying to use a "@id": "./" in a jsonld file and in another triple
"@id": "picture.jpg". The "./" will be correctly changed to the base URL,
but the "@id": "picture.jpg" just gets dropped and a blank node is
created. Below is the code segment that I used to generate this output:
{
"@context": [
"http://schema.org"
],
"@graph": [
{
"@type": "CreativeWork",
"@id": "picture.jpg"
},
{
"@id": "./",
"@type": "DataSet"
}
]
}
_:Bd42dbcf4e4ffb76e199766bf5e4c1e4b <
http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
http://schema.org/CreativeWork> .
<http://mydomain.com> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
http://schema.org/DataSet> .
If I use https://json-ld.org/playground/ on the same jsonld, I get:
<https://json-ld.org/playground/> <
http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://schema.org/DataSet>
.
<https://json-ld.org/playground/picture.jpg> <
http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
http://schema.org/CreativeWork> .
which is what I expected. Am I missing something here? - Erich
String json = "{\n" +
" \"@context\": [\n" +
" \"http://schema.org\"\n" +
" ],\n" +
" \"@graph\": [\n" +
" {\n" +
" \"@type\": \"CreativeWork\",\n" +
" \"@id\": \"picture.jpg\"\n" +
" },\n" +
" {\n" +
" \"@id\": \"./\",\n" +
" \"@type\": \"DataSet\"\n" +
" }\n" +
" ]\n" +
"}";
System.out.println(json);
Model m = ModelFactory.createDefaultModel();
InputStream inputStream = new
ByteArrayInputStream(json.getBytes(Charset.forName("UTF-8")));
RDFParser.create()
.base("http://mydomain.com")
.source(inputStream)
.lang(RDFLanguages.JSONLD)
.parse(m);
RDFDataMgr.write(System.out, m, RDFFormat.NQUADS) ;
Re: JSONLD and base URL
Posted by Andy Seaborne <an...@apache.org>.
On 08/03/2020 18:40, Erich Bremer wrote:
> Sorry! Your email said "Or https://github.com/afs/iri4ld"
OK I can see that.
I've put the issue on jsonld-java.
https://github.com/jsonld-java/jsonld-java/issues/279
Andy
>
> On Thu, Mar 5, 2020 at 4:18 AM Andy Seaborne <an...@apache.org> wrote:
>
>> Not quite!
>>
>> You've raise an issue with afs/iri4ld - my personal project for IRI
>> parsing.
>>
>> Which isn't jsonld-java (https://github.com/jsonld-java/jsonld-java/)
>> nor is it used by jsonld-java.
>>
>> afs/iri4ld that aims to be standard's compliant but faster and easier to
>> maintain than jena-iri (because it has less functionality than
>> jena-iri). And it does get this case right.
>>
>> Andy
>>
>> PS It has a companion project xsd4ld - doing XSD datatypes.
>>
>>
>> On 04/03/2020 23:39, Erich Bremer wrote:
>>> Andy - done.
>>>
>>> On Wed, Mar 4, 2020 at 12:25 PM Andy Seaborne <an...@apache.org> wrote:
>>>
>>>> java.net.URI is not perfect and it is also a mixture of RFC2396, RFC3896
>>>> and some pragmatics.
>>>>
>>>> Jena's own jena-iri gets it right.
>>>>
>>>> // NB The argument order can catch you out.
>>>> IRI iri = IRIResolver.resolve("picture.jpg", "http://mysite.net" );
>>>> System.out.println(iri);
>>>>
>>>> but jsonld-java uses java.net.URI.
>>>>
>>>> Erich - please could you raise an issue with jsonld-java?
>>>>
>>>> Andy
>>>>
>>>> Or https://github.com/afs/iri4ld
>>>>
>>>> On 04/03/2020 16:57, Erich Bremer wrote:
>>>>> Thanks for the reference Martynas! According to the section
>> referenced,
>>>>> the following two URLs are equivalent.
>>>>>
>>>>> http://example.com
>>>>> http://example.com/
>>>>>
>>>>> I can modify my own code to do the check and fix it for myself, but I
>>>>> would think URI.resolve should treat them as equivalents and not
>>>>> mindlessly concatenate them. How the jsonld-java people or the Jena
>>>>> community, which uses jsonld-java, will have to make the call on how
>>>>> to handle it. - Erich
>>>>>
>>>>>
>>>>> On Wed, Mar 4, 2020 at 11:24 AM Martynas Jusevičius <
>>>> martynas@atomgraph.com>
>>>>> wrote:
>>>>>
>>>>>> URI.resolve() will not assume anything.
>>>>>>
>>>>>> Base URI normally ends with a /. Don’t know if this is the best
>>>> reference,
>>>>>> but close:
>>>>>> https://tools.ietf.org/html/rfc3986#section-6.2.3
>>>>>>
>>>>>> You need to check the URI RFC and its resolution algorithm.
>>>>>>
>>>>>> On Wed, 4 Mar 2020 at 16.57, Erich Bremer <er...@ebremer.com> wrote:
>>>>>>
>>>>>>> This also works:
>>>>>>>
>>>>>>> URI uri = new URI("http://mysite.net");
>>>>>>> System.out.println(uri.resolve("/picture.jpg"));
>>>>>>>
>>>>>>> but if no trailing "/" and no leading "/" on path will yield the
>>>>>>> concatenated http://mysite.netpicture.jpg which then gets tossed
>> and a
>>>>>>> blank node is formed.
>>>>>>>
>>>>>>> Should URI.resolve assume a "/" if no trailing nor leading "/" is
>>>>>> present?
>>>>>>> - Erich
>>>>>>>
>>>>>>> On Wed, Mar 4, 2020 at 10:52 AM Erich Bremer <er...@ebremer.com>
>>>> wrote:
>>>>>>>
>>>>>>>> The program works if I specify the base with a trailing slash as "
>>>>>>>> http://mysite.net/"
>>>>>>>> I ran through the code and the problem appears to be here:
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>
>> https://github.com/jsonld-java/jsonld-java/blob/66012db2f53b009cedeae50c83b5594b9dd05e11/core/src/main/java/com/github/jsonldjava/utils/JsonLdUrl.java#L283
>>>>>>>>
>>>>>>>> In the short code segment here, you can see:
>>>>>>>> URI uri = new URI("http://mysite.net");
>>>>>>>> System.out.println(uri.resolve("picture.jpg"));
>>>>>>>>
>>>>>>>> Output:
>>>>>>>> http://mysite.netpicture.jpg
>>>>>>>>
>>>>>>>>
>>>>>>>> On Wed, Mar 4, 2020 at 10:05 AM Erich Bremer <er...@ebremer.com>
>>>>>> wrote:
>>>>>>>>
>>>>>>>>> Same thing:
>>>>>>>>> Source JSONLD
>>>>>>>>> {
>>>>>>>>> "@context": [
>>>>>>>>> "http://schema.org"
>>>>>>>>> ],
>>>>>>>>> "@graph": [
>>>>>>>>> {
>>>>>>>>> "@type": "CreativeWork",
>>>>>>>>> "@id": "picture.jpg"
>>>>>>>>> },
>>>>>>>>> {
>>>>>>>>> "@id": "./",
>>>>>>>>> "@type": "DataSet"
>>>>>>>>> }
>>>>>>>>> ]
>>>>>>>>> }
>>>>>>>>> AFTER loading
>>>>>>> ============================================================
>>>>>>>>> Base : http://mysite.net
>>>>>>>>> SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
>>>>>>>>> SLF4J: Defaulting to no-operation (NOP) logger implementation
>>>>>>>>> SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for
>>>>>>>>> further details.
>>>>>>>>> [ {
>>>>>>>>> "@type" : [ "http://schema.org/CreativeWork" ]
>>>>>>>>> }, {
>>>>>>>>> "@id" : "http://mysite.net",
>>>>>>>>> "@type" : [ "http://schema.org/DataSet" ]
>>>>>>>>> } ]
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> CODE ====================================
>>>>>>>>> package com.mycompany.tesjsonld;
>>>>>>>>>
>>>>>>>>> import com.github.jsonldjava.core.JsonLdOptions;
>>>>>>>>> import com.github.jsonldjava.core.JsonLdProcessor;
>>>>>>>>> import com.github.jsonldjava.utils.JsonUtils;
>>>>>>>>> import java.io.ByteArrayInputStream;
>>>>>>>>> import java.io.FileNotFoundException;
>>>>>>>>> import java.io.IOException;
>>>>>>>>> import java.io.InputStream;
>>>>>>>>> import java.nio.charset.Charset;
>>>>>>>>>
>>>>>>>>> /**
>>>>>>>>> *
>>>>>>>>> * @author erich
>>>>>>>>> */
>>>>>>>>> public class tryme {
>>>>>>>>>
>>>>>>>>> public static void main(String[] args) throws
>>>>>> FileNotFoundException,
>>>>>>>>> IOException {
>>>>>>>>> String json = "{\n" +
>>>>>>>>> " \"@context\": [\n" +
>>>>>>>>> " \"http://schema.org\"\n" +
>>>>>>>>> " ],\n" +
>>>>>>>>> " \"@graph\": [\n" +
>>>>>>>>> " {\n" +
>>>>>>>>> " \"@type\": \"CreativeWork\",\n" +
>>>>>>>>> " \"@id\": \"picture.jpg\"\n" +
>>>>>>>>> " },\n" +
>>>>>>>>> " {\n" +
>>>>>>>>> " \"@id\": \"./\",\n" +
>>>>>>>>> " \"@type\": \"DataSet\"\n" +
>>>>>>>>> " }\n" +
>>>>>>>>> " ]\n" +
>>>>>>>>> "}";
>>>>>>>>>
>>>>>>>>> System.out.println(json);
>>>>>>>>>
>>>>>>>>>
>>>>>>>
>>>>>>
>>>>
>> System.out.println("============================================================");
>>>>>>>>> InputStream inputStream = new
>>>>>>>>> ByteArrayInputStream(json.getBytes(Charset.forName("UTF-8")));
>>>>>>>>> Object jsonObject =
>> JsonUtils.fromInputStream(inputStream);
>>>>>>>>> JsonLdOptions options = new JsonLdOptions("
>>>> http://mysite.net
>>>>>> ");
>>>>>>>>> System.out.println("Base : "+options.getBase());
>>>>>>>>> //Object compact = JsonLdProcessor.compact(jsonObject,
>> null,
>>>>>>>>> options);
>>>>>>>>> Object compact = JsonLdProcessor.expand(jsonObject,
>>>> options);
>>>>>>>>> System.out.println(JsonUtils.toPrettyString(compact));
>>>>>>>>> }
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> On Wed, Mar 4, 2020 at 9:44 AM Erich Bremer <er...@ebremer.com>
>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> I will try with the other library to check.
>>>>>>>>>>
>>>>>>>>>> On Wed, Mar 4, 2020 at 4:29 AM Rob Vesse <rv...@dotnetrdf.org>
>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>> This may be an upstream bug or it could be a bug in how we
>>>> configure
>>>>>>>>>>> the underlying parser
>>>>>>>>>>>
>>>>>>>>>>> Jena's JSON-LD support is based upon the
>>>>>>>>>>> https://github.com/jsonld-java/jsonld-java library so you could
>>>> try
>>>>>>>>>>> and reproduce your test case just using their library directly
>>>> which
>>>>>>> would
>>>>>>>>>>> determine if it is their bug or our bug
>>>>>>>>>>>
>>>>>>>>>>> Rob
>>>>>>>>>>>
>>>>>>>>>>> On 04/03/2020, 00:11, "Erich Bremer" <er...@ebremer.com> wrote:
>>>>>>>>>>>
>>>>>>>>>>> I'm trying to use a "@id": "./" in a jsonld file and in
>>>> another
>>>>>>>>>>> triple
>>>>>>>>>>> "@id": "picture.jpg". The "./" will be correctly changed
>> to
>>>> the
>>>>>>>>>>> base URL,
>>>>>>>>>>> but the "@id": "picture.jpg" just gets dropped and a blank
>>>> node
>>>>>> is
>>>>>>>>>>> created. Below is the code segment that I used to generate
>>>> this
>>>>>>>>>>> output:
>>>>>>>>>>> {
>>>>>>>>>>> "@context": [
>>>>>>>>>>> "http://schema.org"
>>>>>>>>>>> ],
>>>>>>>>>>> "@graph": [
>>>>>>>>>>> {
>>>>>>>>>>> "@type": "CreativeWork",
>>>>>>>>>>> "@id": "picture.jpg"
>>>>>>>>>>> },
>>>>>>>>>>> {
>>>>>>>>>>> "@id": "./",
>>>>>>>>>>> "@type": "DataSet"
>>>>>>>>>>> }
>>>>>>>>>>> ]
>>>>>>>>>>> }
>>>>>>>>>>> _:Bd42dbcf4e4ffb76e199766bf5e4c1e4b <
>>>>>>>>>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
>>>>>>>>>>> http://schema.org/CreativeWork> .
>>>>>>>>>>> <http://mydomain.com> <
>>>>>>>>>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
>>>>>>>>>>> http://schema.org/DataSet> .
>>>>>>>>>>>
>>>>>>>>>>> If I use https://json-ld.org/playground/ on the same
>> jsonld,
>>>> I
>>>>>>> get:
>>>>>>>>>>>
>>>>>>>>>>> <https://json-ld.org/playground/> <
>>>>>>>>>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
>>>>>>>>>>> http://schema.org/DataSet>
>>>>>>>>>>> .
>>>>>>>>>>> <https://json-ld.org/playground/picture.jpg> <
>>>>>>>>>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
>>>>>>>>>>> http://schema.org/CreativeWork> .
>>>>>>>>>>>
>>>>>>>>>>> which is what I expected. Am I missing something here? -
>>>> Erich
>>>>>>>>>>>
>>>>>>>>>>> String json = "{\n" +
>>>>>>>>>>> " \"@context\": [\n" +
>>>>>>>>>>> " \"http://schema.org\"\n" +
>>>>>>>>>>> " ],\n" +
>>>>>>>>>>> " \"@graph\": [\n" +
>>>>>>>>>>> " {\n" +
>>>>>>>>>>> " \"@type\": \"CreativeWork\",\n" +
>>>>>>>>>>> " \"@id\": \"picture.jpg\"\n" +
>>>>>>>>>>> " },\n" +
>>>>>>>>>>> " {\n" +
>>>>>>>>>>> " \"@id\": \"./\",\n" +
>>>>>>>>>>> " \"@type\": \"DataSet\"\n" +
>>>>>>>>>>> " }\n" +
>>>>>>>>>>> " ]\n" +
>>>>>>>>>>> "}";
>>>>>>>>>>> System.out.println(json);
>>>>>>>>>>> Model m = ModelFactory.createDefaultModel();
>>>>>>>>>>> InputStream inputStream = new
>>>>>>>>>>>
>> ByteArrayInputStream(json.getBytes(Charset.forName("UTF-8")));
>>>>>>>>>>> RDFParser.create()
>>>>>>>>>>> .base("http://mydomain.com")
>>>>>>>>>>> .source(inputStream)
>>>>>>>>>>> .lang(RDFLanguages.JSONLD)
>>>>>>>>>>> .parse(m);
>>>>>>>>>>> RDFDataMgr.write(System.out, m, RDFFormat.NQUADS) ;
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>
Re: JSONLD and base URL
Posted by Erich Bremer <er...@ebremer.com>.
Sorry! Your email said "Or https://github.com/afs/iri4ld"
On Thu, Mar 5, 2020 at 4:18 AM Andy Seaborne <an...@apache.org> wrote:
> Not quite!
>
> You've raise an issue with afs/iri4ld - my personal project for IRI
> parsing.
>
> Which isn't jsonld-java (https://github.com/jsonld-java/jsonld-java/)
> nor is it used by jsonld-java.
>
> afs/iri4ld that aims to be standard's compliant but faster and easier to
> maintain than jena-iri (because it has less functionality than
> jena-iri). And it does get this case right.
>
> Andy
>
> PS It has a companion project xsd4ld - doing XSD datatypes.
>
>
> On 04/03/2020 23:39, Erich Bremer wrote:
> > Andy - done.
> >
> > On Wed, Mar 4, 2020 at 12:25 PM Andy Seaborne <an...@apache.org> wrote:
> >
> >> java.net.URI is not perfect and it is also a mixture of RFC2396, RFC3896
> >> and some pragmatics.
> >>
> >> Jena's own jena-iri gets it right.
> >>
> >> // NB The argument order can catch you out.
> >> IRI iri = IRIResolver.resolve("picture.jpg", "http://mysite.net" );
> >> System.out.println(iri);
> >>
> >> but jsonld-java uses java.net.URI.
> >>
> >> Erich - please could you raise an issue with jsonld-java?
> >>
> >> Andy
> >>
> >> Or https://github.com/afs/iri4ld
> >>
> >> On 04/03/2020 16:57, Erich Bremer wrote:
> >>> Thanks for the reference Martynas! According to the section
> referenced,
> >>> the following two URLs are equivalent.
> >>>
> >>> http://example.com
> >>> http://example.com/
> >>>
> >>> I can modify my own code to do the check and fix it for myself, but I
> >>> would think URI.resolve should treat them as equivalents and not
> >>> mindlessly concatenate them. How the jsonld-java people or the Jena
> >>> community, which uses jsonld-java, will have to make the call on how
> >>> to handle it. - Erich
> >>>
> >>>
> >>> On Wed, Mar 4, 2020 at 11:24 AM Martynas Jusevičius <
> >> martynas@atomgraph.com>
> >>> wrote:
> >>>
> >>>> URI.resolve() will not assume anything.
> >>>>
> >>>> Base URI normally ends with a /. Don’t know if this is the best
> >> reference,
> >>>> but close:
> >>>> https://tools.ietf.org/html/rfc3986#section-6.2.3
> >>>>
> >>>> You need to check the URI RFC and its resolution algorithm.
> >>>>
> >>>> On Wed, 4 Mar 2020 at 16.57, Erich Bremer <er...@ebremer.com> wrote:
> >>>>
> >>>>> This also works:
> >>>>>
> >>>>> URI uri = new URI("http://mysite.net");
> >>>>> System.out.println(uri.resolve("/picture.jpg"));
> >>>>>
> >>>>> but if no trailing "/" and no leading "/" on path will yield the
> >>>>> concatenated http://mysite.netpicture.jpg which then gets tossed
> and a
> >>>>> blank node is formed.
> >>>>>
> >>>>> Should URI.resolve assume a "/" if no trailing nor leading "/" is
> >>>> present?
> >>>>> - Erich
> >>>>>
> >>>>> On Wed, Mar 4, 2020 at 10:52 AM Erich Bremer <er...@ebremer.com>
> >> wrote:
> >>>>>
> >>>>>> The program works if I specify the base with a trailing slash as "
> >>>>>> http://mysite.net/"
> >>>>>> I ran through the code and the problem appears to be here:
> >>>>>>
> >>>>>>
> >>>>>
> >>>>
> >>
> https://github.com/jsonld-java/jsonld-java/blob/66012db2f53b009cedeae50c83b5594b9dd05e11/core/src/main/java/com/github/jsonldjava/utils/JsonLdUrl.java#L283
> >>>>>>
> >>>>>> In the short code segment here, you can see:
> >>>>>> URI uri = new URI("http://mysite.net");
> >>>>>> System.out.println(uri.resolve("picture.jpg"));
> >>>>>>
> >>>>>> Output:
> >>>>>> http://mysite.netpicture.jpg
> >>>>>>
> >>>>>>
> >>>>>> On Wed, Mar 4, 2020 at 10:05 AM Erich Bremer <er...@ebremer.com>
> >>>> wrote:
> >>>>>>
> >>>>>>> Same thing:
> >>>>>>> Source JSONLD
> >>>>>>> {
> >>>>>>> "@context": [
> >>>>>>> "http://schema.org"
> >>>>>>> ],
> >>>>>>> "@graph": [
> >>>>>>> {
> >>>>>>> "@type": "CreativeWork",
> >>>>>>> "@id": "picture.jpg"
> >>>>>>> },
> >>>>>>> {
> >>>>>>> "@id": "./",
> >>>>>>> "@type": "DataSet"
> >>>>>>> }
> >>>>>>> ]
> >>>>>>> }
> >>>>>>> AFTER loading
> >>>>> ============================================================
> >>>>>>> Base : http://mysite.net
> >>>>>>> SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
> >>>>>>> SLF4J: Defaulting to no-operation (NOP) logger implementation
> >>>>>>> SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for
> >>>>>>> further details.
> >>>>>>> [ {
> >>>>>>> "@type" : [ "http://schema.org/CreativeWork" ]
> >>>>>>> }, {
> >>>>>>> "@id" : "http://mysite.net",
> >>>>>>> "@type" : [ "http://schema.org/DataSet" ]
> >>>>>>> } ]
> >>>>>>>
> >>>>>>>
> >>>>>>> CODE ====================================
> >>>>>>> package com.mycompany.tesjsonld;
> >>>>>>>
> >>>>>>> import com.github.jsonldjava.core.JsonLdOptions;
> >>>>>>> import com.github.jsonldjava.core.JsonLdProcessor;
> >>>>>>> import com.github.jsonldjava.utils.JsonUtils;
> >>>>>>> import java.io.ByteArrayInputStream;
> >>>>>>> import java.io.FileNotFoundException;
> >>>>>>> import java.io.IOException;
> >>>>>>> import java.io.InputStream;
> >>>>>>> import java.nio.charset.Charset;
> >>>>>>>
> >>>>>>> /**
> >>>>>>> *
> >>>>>>> * @author erich
> >>>>>>> */
> >>>>>>> public class tryme {
> >>>>>>>
> >>>>>>> public static void main(String[] args) throws
> >>>> FileNotFoundException,
> >>>>>>> IOException {
> >>>>>>> String json = "{\n" +
> >>>>>>> " \"@context\": [\n" +
> >>>>>>> " \"http://schema.org\"\n" +
> >>>>>>> " ],\n" +
> >>>>>>> " \"@graph\": [\n" +
> >>>>>>> " {\n" +
> >>>>>>> " \"@type\": \"CreativeWork\",\n" +
> >>>>>>> " \"@id\": \"picture.jpg\"\n" +
> >>>>>>> " },\n" +
> >>>>>>> " {\n" +
> >>>>>>> " \"@id\": \"./\",\n" +
> >>>>>>> " \"@type\": \"DataSet\"\n" +
> >>>>>>> " }\n" +
> >>>>>>> " ]\n" +
> >>>>>>> "}";
> >>>>>>>
> >>>>>>> System.out.println(json);
> >>>>>>>
> >>>>>>>
> >>>>>
> >>>>
> >>
> System.out.println("============================================================");
> >>>>>>> InputStream inputStream = new
> >>>>>>> ByteArrayInputStream(json.getBytes(Charset.forName("UTF-8")));
> >>>>>>> Object jsonObject =
> JsonUtils.fromInputStream(inputStream);
> >>>>>>> JsonLdOptions options = new JsonLdOptions("
> >> http://mysite.net
> >>>> ");
> >>>>>>> System.out.println("Base : "+options.getBase());
> >>>>>>> //Object compact = JsonLdProcessor.compact(jsonObject,
> null,
> >>>>>>> options);
> >>>>>>> Object compact = JsonLdProcessor.expand(jsonObject,
> >> options);
> >>>>>>> System.out.println(JsonUtils.toPrettyString(compact));
> >>>>>>> }
> >>>>>>> }
> >>>>>>>
> >>>>>>> On Wed, Mar 4, 2020 at 9:44 AM Erich Bremer <er...@ebremer.com>
> >>>> wrote:
> >>>>>>>
> >>>>>>>> I will try with the other library to check.
> >>>>>>>>
> >>>>>>>> On Wed, Mar 4, 2020 at 4:29 AM Rob Vesse <rv...@dotnetrdf.org>
> >>>> wrote:
> >>>>>>>>
> >>>>>>>>> This may be an upstream bug or it could be a bug in how we
> >> configure
> >>>>>>>>> the underlying parser
> >>>>>>>>>
> >>>>>>>>> Jena's JSON-LD support is based upon the
> >>>>>>>>> https://github.com/jsonld-java/jsonld-java library so you could
> >> try
> >>>>>>>>> and reproduce your test case just using their library directly
> >> which
> >>>>> would
> >>>>>>>>> determine if it is their bug or our bug
> >>>>>>>>>
> >>>>>>>>> Rob
> >>>>>>>>>
> >>>>>>>>> On 04/03/2020, 00:11, "Erich Bremer" <er...@ebremer.com> wrote:
> >>>>>>>>>
> >>>>>>>>> I'm trying to use a "@id": "./" in a jsonld file and in
> >> another
> >>>>>>>>> triple
> >>>>>>>>> "@id": "picture.jpg". The "./" will be correctly changed
> to
> >> the
> >>>>>>>>> base URL,
> >>>>>>>>> but the "@id": "picture.jpg" just gets dropped and a blank
> >> node
> >>>> is
> >>>>>>>>> created. Below is the code segment that I used to generate
> >> this
> >>>>>>>>> output:
> >>>>>>>>> {
> >>>>>>>>> "@context": [
> >>>>>>>>> "http://schema.org"
> >>>>>>>>> ],
> >>>>>>>>> "@graph": [
> >>>>>>>>> {
> >>>>>>>>> "@type": "CreativeWork",
> >>>>>>>>> "@id": "picture.jpg"
> >>>>>>>>> },
> >>>>>>>>> {
> >>>>>>>>> "@id": "./",
> >>>>>>>>> "@type": "DataSet"
> >>>>>>>>> }
> >>>>>>>>> ]
> >>>>>>>>> }
> >>>>>>>>> _:Bd42dbcf4e4ffb76e199766bf5e4c1e4b <
> >>>>>>>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
> >>>>>>>>> http://schema.org/CreativeWork> .
> >>>>>>>>> <http://mydomain.com> <
> >>>>>>>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
> >>>>>>>>> http://schema.org/DataSet> .
> >>>>>>>>>
> >>>>>>>>> If I use https://json-ld.org/playground/ on the same
> jsonld,
> >> I
> >>>>> get:
> >>>>>>>>>
> >>>>>>>>> <https://json-ld.org/playground/> <
> >>>>>>>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
> >>>>>>>>> http://schema.org/DataSet>
> >>>>>>>>> .
> >>>>>>>>> <https://json-ld.org/playground/picture.jpg> <
> >>>>>>>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
> >>>>>>>>> http://schema.org/CreativeWork> .
> >>>>>>>>>
> >>>>>>>>> which is what I expected. Am I missing something here? -
> >> Erich
> >>>>>>>>>
> >>>>>>>>> String json = "{\n" +
> >>>>>>>>> " \"@context\": [\n" +
> >>>>>>>>> " \"http://schema.org\"\n" +
> >>>>>>>>> " ],\n" +
> >>>>>>>>> " \"@graph\": [\n" +
> >>>>>>>>> " {\n" +
> >>>>>>>>> " \"@type\": \"CreativeWork\",\n" +
> >>>>>>>>> " \"@id\": \"picture.jpg\"\n" +
> >>>>>>>>> " },\n" +
> >>>>>>>>> " {\n" +
> >>>>>>>>> " \"@id\": \"./\",\n" +
> >>>>>>>>> " \"@type\": \"DataSet\"\n" +
> >>>>>>>>> " }\n" +
> >>>>>>>>> " ]\n" +
> >>>>>>>>> "}";
> >>>>>>>>> System.out.println(json);
> >>>>>>>>> Model m = ModelFactory.createDefaultModel();
> >>>>>>>>> InputStream inputStream = new
> >>>>>>>>>
> ByteArrayInputStream(json.getBytes(Charset.forName("UTF-8")));
> >>>>>>>>> RDFParser.create()
> >>>>>>>>> .base("http://mydomain.com")
> >>>>>>>>> .source(inputStream)
> >>>>>>>>> .lang(RDFLanguages.JSONLD)
> >>>>>>>>> .parse(m);
> >>>>>>>>> RDFDataMgr.write(System.out, m, RDFFormat.NQUADS) ;
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>
> >>>>
> >>>
> >>
> >
>
Re: JSONLD and base URL
Posted by Andy Seaborne <an...@apache.org>.
Not quite!
You've raise an issue with afs/iri4ld - my personal project for IRI parsing.
Which isn't jsonld-java (https://github.com/jsonld-java/jsonld-java/)
nor is it used by jsonld-java.
afs/iri4ld that aims to be standard's compliant but faster and easier to
maintain than jena-iri (because it has less functionality than
jena-iri). And it does get this case right.
Andy
PS It has a companion project xsd4ld - doing XSD datatypes.
On 04/03/2020 23:39, Erich Bremer wrote:
> Andy - done.
>
> On Wed, Mar 4, 2020 at 12:25 PM Andy Seaborne <an...@apache.org> wrote:
>
>> java.net.URI is not perfect and it is also a mixture of RFC2396, RFC3896
>> and some pragmatics.
>>
>> Jena's own jena-iri gets it right.
>>
>> // NB The argument order can catch you out.
>> IRI iri = IRIResolver.resolve("picture.jpg", "http://mysite.net" );
>> System.out.println(iri);
>>
>> but jsonld-java uses java.net.URI.
>>
>> Erich - please could you raise an issue with jsonld-java?
>>
>> Andy
>>
>> Or https://github.com/afs/iri4ld
>>
>> On 04/03/2020 16:57, Erich Bremer wrote:
>>> Thanks for the reference Martynas! According to the section referenced,
>>> the following two URLs are equivalent.
>>>
>>> http://example.com
>>> http://example.com/
>>>
>>> I can modify my own code to do the check and fix it for myself, but I
>>> would think URI.resolve should treat them as equivalents and not
>>> mindlessly concatenate them. How the jsonld-java people or the Jena
>>> community, which uses jsonld-java, will have to make the call on how
>>> to handle it. - Erich
>>>
>>>
>>> On Wed, Mar 4, 2020 at 11:24 AM Martynas Jusevičius <
>> martynas@atomgraph.com>
>>> wrote:
>>>
>>>> URI.resolve() will not assume anything.
>>>>
>>>> Base URI normally ends with a /. Don’t know if this is the best
>> reference,
>>>> but close:
>>>> https://tools.ietf.org/html/rfc3986#section-6.2.3
>>>>
>>>> You need to check the URI RFC and its resolution algorithm.
>>>>
>>>> On Wed, 4 Mar 2020 at 16.57, Erich Bremer <er...@ebremer.com> wrote:
>>>>
>>>>> This also works:
>>>>>
>>>>> URI uri = new URI("http://mysite.net");
>>>>> System.out.println(uri.resolve("/picture.jpg"));
>>>>>
>>>>> but if no trailing "/" and no leading "/" on path will yield the
>>>>> concatenated http://mysite.netpicture.jpg which then gets tossed and a
>>>>> blank node is formed.
>>>>>
>>>>> Should URI.resolve assume a "/" if no trailing nor leading "/" is
>>>> present?
>>>>> - Erich
>>>>>
>>>>> On Wed, Mar 4, 2020 at 10:52 AM Erich Bremer <er...@ebremer.com>
>> wrote:
>>>>>
>>>>>> The program works if I specify the base with a trailing slash as "
>>>>>> http://mysite.net/"
>>>>>> I ran through the code and the problem appears to be here:
>>>>>>
>>>>>>
>>>>>
>>>>
>> https://github.com/jsonld-java/jsonld-java/blob/66012db2f53b009cedeae50c83b5594b9dd05e11/core/src/main/java/com/github/jsonldjava/utils/JsonLdUrl.java#L283
>>>>>>
>>>>>> In the short code segment here, you can see:
>>>>>> URI uri = new URI("http://mysite.net");
>>>>>> System.out.println(uri.resolve("picture.jpg"));
>>>>>>
>>>>>> Output:
>>>>>> http://mysite.netpicture.jpg
>>>>>>
>>>>>>
>>>>>> On Wed, Mar 4, 2020 at 10:05 AM Erich Bremer <er...@ebremer.com>
>>>> wrote:
>>>>>>
>>>>>>> Same thing:
>>>>>>> Source JSONLD
>>>>>>> {
>>>>>>> "@context": [
>>>>>>> "http://schema.org"
>>>>>>> ],
>>>>>>> "@graph": [
>>>>>>> {
>>>>>>> "@type": "CreativeWork",
>>>>>>> "@id": "picture.jpg"
>>>>>>> },
>>>>>>> {
>>>>>>> "@id": "./",
>>>>>>> "@type": "DataSet"
>>>>>>> }
>>>>>>> ]
>>>>>>> }
>>>>>>> AFTER loading
>>>>> ============================================================
>>>>>>> Base : http://mysite.net
>>>>>>> SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
>>>>>>> SLF4J: Defaulting to no-operation (NOP) logger implementation
>>>>>>> SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for
>>>>>>> further details.
>>>>>>> [ {
>>>>>>> "@type" : [ "http://schema.org/CreativeWork" ]
>>>>>>> }, {
>>>>>>> "@id" : "http://mysite.net",
>>>>>>> "@type" : [ "http://schema.org/DataSet" ]
>>>>>>> } ]
>>>>>>>
>>>>>>>
>>>>>>> CODE ====================================
>>>>>>> package com.mycompany.tesjsonld;
>>>>>>>
>>>>>>> import com.github.jsonldjava.core.JsonLdOptions;
>>>>>>> import com.github.jsonldjava.core.JsonLdProcessor;
>>>>>>> import com.github.jsonldjava.utils.JsonUtils;
>>>>>>> import java.io.ByteArrayInputStream;
>>>>>>> import java.io.FileNotFoundException;
>>>>>>> import java.io.IOException;
>>>>>>> import java.io.InputStream;
>>>>>>> import java.nio.charset.Charset;
>>>>>>>
>>>>>>> /**
>>>>>>> *
>>>>>>> * @author erich
>>>>>>> */
>>>>>>> public class tryme {
>>>>>>>
>>>>>>> public static void main(String[] args) throws
>>>> FileNotFoundException,
>>>>>>> IOException {
>>>>>>> String json = "{\n" +
>>>>>>> " \"@context\": [\n" +
>>>>>>> " \"http://schema.org\"\n" +
>>>>>>> " ],\n" +
>>>>>>> " \"@graph\": [\n" +
>>>>>>> " {\n" +
>>>>>>> " \"@type\": \"CreativeWork\",\n" +
>>>>>>> " \"@id\": \"picture.jpg\"\n" +
>>>>>>> " },\n" +
>>>>>>> " {\n" +
>>>>>>> " \"@id\": \"./\",\n" +
>>>>>>> " \"@type\": \"DataSet\"\n" +
>>>>>>> " }\n" +
>>>>>>> " ]\n" +
>>>>>>> "}";
>>>>>>>
>>>>>>> System.out.println(json);
>>>>>>>
>>>>>>>
>>>>>
>>>>
>> System.out.println("============================================================");
>>>>>>> InputStream inputStream = new
>>>>>>> ByteArrayInputStream(json.getBytes(Charset.forName("UTF-8")));
>>>>>>> Object jsonObject = JsonUtils.fromInputStream(inputStream);
>>>>>>> JsonLdOptions options = new JsonLdOptions("
>> http://mysite.net
>>>> ");
>>>>>>> System.out.println("Base : "+options.getBase());
>>>>>>> //Object compact = JsonLdProcessor.compact(jsonObject, null,
>>>>>>> options);
>>>>>>> Object compact = JsonLdProcessor.expand(jsonObject,
>> options);
>>>>>>> System.out.println(JsonUtils.toPrettyString(compact));
>>>>>>> }
>>>>>>> }
>>>>>>>
>>>>>>> On Wed, Mar 4, 2020 at 9:44 AM Erich Bremer <er...@ebremer.com>
>>>> wrote:
>>>>>>>
>>>>>>>> I will try with the other library to check.
>>>>>>>>
>>>>>>>> On Wed, Mar 4, 2020 at 4:29 AM Rob Vesse <rv...@dotnetrdf.org>
>>>> wrote:
>>>>>>>>
>>>>>>>>> This may be an upstream bug or it could be a bug in how we
>> configure
>>>>>>>>> the underlying parser
>>>>>>>>>
>>>>>>>>> Jena's JSON-LD support is based upon the
>>>>>>>>> https://github.com/jsonld-java/jsonld-java library so you could
>> try
>>>>>>>>> and reproduce your test case just using their library directly
>> which
>>>>> would
>>>>>>>>> determine if it is their bug or our bug
>>>>>>>>>
>>>>>>>>> Rob
>>>>>>>>>
>>>>>>>>> On 04/03/2020, 00:11, "Erich Bremer" <er...@ebremer.com> wrote:
>>>>>>>>>
>>>>>>>>> I'm trying to use a "@id": "./" in a jsonld file and in
>> another
>>>>>>>>> triple
>>>>>>>>> "@id": "picture.jpg". The "./" will be correctly changed to
>> the
>>>>>>>>> base URL,
>>>>>>>>> but the "@id": "picture.jpg" just gets dropped and a blank
>> node
>>>> is
>>>>>>>>> created. Below is the code segment that I used to generate
>> this
>>>>>>>>> output:
>>>>>>>>> {
>>>>>>>>> "@context": [
>>>>>>>>> "http://schema.org"
>>>>>>>>> ],
>>>>>>>>> "@graph": [
>>>>>>>>> {
>>>>>>>>> "@type": "CreativeWork",
>>>>>>>>> "@id": "picture.jpg"
>>>>>>>>> },
>>>>>>>>> {
>>>>>>>>> "@id": "./",
>>>>>>>>> "@type": "DataSet"
>>>>>>>>> }
>>>>>>>>> ]
>>>>>>>>> }
>>>>>>>>> _:Bd42dbcf4e4ffb76e199766bf5e4c1e4b <
>>>>>>>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
>>>>>>>>> http://schema.org/CreativeWork> .
>>>>>>>>> <http://mydomain.com> <
>>>>>>>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
>>>>>>>>> http://schema.org/DataSet> .
>>>>>>>>>
>>>>>>>>> If I use https://json-ld.org/playground/ on the same jsonld,
>> I
>>>>> get:
>>>>>>>>>
>>>>>>>>> <https://json-ld.org/playground/> <
>>>>>>>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
>>>>>>>>> http://schema.org/DataSet>
>>>>>>>>> .
>>>>>>>>> <https://json-ld.org/playground/picture.jpg> <
>>>>>>>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
>>>>>>>>> http://schema.org/CreativeWork> .
>>>>>>>>>
>>>>>>>>> which is what I expected. Am I missing something here? -
>> Erich
>>>>>>>>>
>>>>>>>>> String json = "{\n" +
>>>>>>>>> " \"@context\": [\n" +
>>>>>>>>> " \"http://schema.org\"\n" +
>>>>>>>>> " ],\n" +
>>>>>>>>> " \"@graph\": [\n" +
>>>>>>>>> " {\n" +
>>>>>>>>> " \"@type\": \"CreativeWork\",\n" +
>>>>>>>>> " \"@id\": \"picture.jpg\"\n" +
>>>>>>>>> " },\n" +
>>>>>>>>> " {\n" +
>>>>>>>>> " \"@id\": \"./\",\n" +
>>>>>>>>> " \"@type\": \"DataSet\"\n" +
>>>>>>>>> " }\n" +
>>>>>>>>> " ]\n" +
>>>>>>>>> "}";
>>>>>>>>> System.out.println(json);
>>>>>>>>> Model m = ModelFactory.createDefaultModel();
>>>>>>>>> InputStream inputStream = new
>>>>>>>>> ByteArrayInputStream(json.getBytes(Charset.forName("UTF-8")));
>>>>>>>>> RDFParser.create()
>>>>>>>>> .base("http://mydomain.com")
>>>>>>>>> .source(inputStream)
>>>>>>>>> .lang(RDFLanguages.JSONLD)
>>>>>>>>> .parse(m);
>>>>>>>>> RDFDataMgr.write(System.out, m, RDFFormat.NQUADS) ;
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>
>>>>
>>>
>>
>
Re: JSONLD and base URL
Posted by Erich Bremer <er...@ebremer.com>.
Andy - done.
On Wed, Mar 4, 2020 at 12:25 PM Andy Seaborne <an...@apache.org> wrote:
> java.net.URI is not perfect and it is also a mixture of RFC2396, RFC3896
> and some pragmatics.
>
> Jena's own jena-iri gets it right.
>
> // NB The argument order can catch you out.
> IRI iri = IRIResolver.resolve("picture.jpg", "http://mysite.net" );
> System.out.println(iri);
>
> but jsonld-java uses java.net.URI.
>
> Erich - please could you raise an issue with jsonld-java?
>
> Andy
>
> Or https://github.com/afs/iri4ld
>
> On 04/03/2020 16:57, Erich Bremer wrote:
> > Thanks for the reference Martynas! According to the section referenced,
> > the following two URLs are equivalent.
> >
> > http://example.com
> > http://example.com/
> >
> > I can modify my own code to do the check and fix it for myself, but I
> > would think URI.resolve should treat them as equivalents and not
> > mindlessly concatenate them. How the jsonld-java people or the Jena
> > community, which uses jsonld-java, will have to make the call on how
> > to handle it. - Erich
> >
> >
> > On Wed, Mar 4, 2020 at 11:24 AM Martynas Jusevičius <
> martynas@atomgraph.com>
> > wrote:
> >
> >> URI.resolve() will not assume anything.
> >>
> >> Base URI normally ends with a /. Don’t know if this is the best
> reference,
> >> but close:
> >> https://tools.ietf.org/html/rfc3986#section-6.2.3
> >>
> >> You need to check the URI RFC and its resolution algorithm.
> >>
> >> On Wed, 4 Mar 2020 at 16.57, Erich Bremer <er...@ebremer.com> wrote:
> >>
> >>> This also works:
> >>>
> >>> URI uri = new URI("http://mysite.net");
> >>> System.out.println(uri.resolve("/picture.jpg"));
> >>>
> >>> but if no trailing "/" and no leading "/" on path will yield the
> >>> concatenated http://mysite.netpicture.jpg which then gets tossed and a
> >>> blank node is formed.
> >>>
> >>> Should URI.resolve assume a "/" if no trailing nor leading "/" is
> >> present?
> >>> - Erich
> >>>
> >>> On Wed, Mar 4, 2020 at 10:52 AM Erich Bremer <er...@ebremer.com>
> wrote:
> >>>
> >>>> The program works if I specify the base with a trailing slash as "
> >>>> http://mysite.net/"
> >>>> I ran through the code and the problem appears to be here:
> >>>>
> >>>>
> >>>
> >>
> https://github.com/jsonld-java/jsonld-java/blob/66012db2f53b009cedeae50c83b5594b9dd05e11/core/src/main/java/com/github/jsonldjava/utils/JsonLdUrl.java#L283
> >>>>
> >>>> In the short code segment here, you can see:
> >>>> URI uri = new URI("http://mysite.net");
> >>>> System.out.println(uri.resolve("picture.jpg"));
> >>>>
> >>>> Output:
> >>>> http://mysite.netpicture.jpg
> >>>>
> >>>>
> >>>> On Wed, Mar 4, 2020 at 10:05 AM Erich Bremer <er...@ebremer.com>
> >> wrote:
> >>>>
> >>>>> Same thing:
> >>>>> Source JSONLD
> >>>>> {
> >>>>> "@context": [
> >>>>> "http://schema.org"
> >>>>> ],
> >>>>> "@graph": [
> >>>>> {
> >>>>> "@type": "CreativeWork",
> >>>>> "@id": "picture.jpg"
> >>>>> },
> >>>>> {
> >>>>> "@id": "./",
> >>>>> "@type": "DataSet"
> >>>>> }
> >>>>> ]
> >>>>> }
> >>>>> AFTER loading
> >>> ============================================================
> >>>>> Base : http://mysite.net
> >>>>> SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
> >>>>> SLF4J: Defaulting to no-operation (NOP) logger implementation
> >>>>> SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for
> >>>>> further details.
> >>>>> [ {
> >>>>> "@type" : [ "http://schema.org/CreativeWork" ]
> >>>>> }, {
> >>>>> "@id" : "http://mysite.net",
> >>>>> "@type" : [ "http://schema.org/DataSet" ]
> >>>>> } ]
> >>>>>
> >>>>>
> >>>>> CODE ====================================
> >>>>> package com.mycompany.tesjsonld;
> >>>>>
> >>>>> import com.github.jsonldjava.core.JsonLdOptions;
> >>>>> import com.github.jsonldjava.core.JsonLdProcessor;
> >>>>> import com.github.jsonldjava.utils.JsonUtils;
> >>>>> import java.io.ByteArrayInputStream;
> >>>>> import java.io.FileNotFoundException;
> >>>>> import java.io.IOException;
> >>>>> import java.io.InputStream;
> >>>>> import java.nio.charset.Charset;
> >>>>>
> >>>>> /**
> >>>>> *
> >>>>> * @author erich
> >>>>> */
> >>>>> public class tryme {
> >>>>>
> >>>>> public static void main(String[] args) throws
> >> FileNotFoundException,
> >>>>> IOException {
> >>>>> String json = "{\n" +
> >>>>> " \"@context\": [\n" +
> >>>>> " \"http://schema.org\"\n" +
> >>>>> " ],\n" +
> >>>>> " \"@graph\": [\n" +
> >>>>> " {\n" +
> >>>>> " \"@type\": \"CreativeWork\",\n" +
> >>>>> " \"@id\": \"picture.jpg\"\n" +
> >>>>> " },\n" +
> >>>>> " {\n" +
> >>>>> " \"@id\": \"./\",\n" +
> >>>>> " \"@type\": \"DataSet\"\n" +
> >>>>> " }\n" +
> >>>>> " ]\n" +
> >>>>> "}";
> >>>>>
> >>>>> System.out.println(json);
> >>>>>
> >>>>>
> >>>
> >>
> System.out.println("============================================================");
> >>>>> InputStream inputStream = new
> >>>>> ByteArrayInputStream(json.getBytes(Charset.forName("UTF-8")));
> >>>>> Object jsonObject = JsonUtils.fromInputStream(inputStream);
> >>>>> JsonLdOptions options = new JsonLdOptions("
> http://mysite.net
> >> ");
> >>>>> System.out.println("Base : "+options.getBase());
> >>>>> //Object compact = JsonLdProcessor.compact(jsonObject, null,
> >>>>> options);
> >>>>> Object compact = JsonLdProcessor.expand(jsonObject,
> options);
> >>>>> System.out.println(JsonUtils.toPrettyString(compact));
> >>>>> }
> >>>>> }
> >>>>>
> >>>>> On Wed, Mar 4, 2020 at 9:44 AM Erich Bremer <er...@ebremer.com>
> >> wrote:
> >>>>>
> >>>>>> I will try with the other library to check.
> >>>>>>
> >>>>>> On Wed, Mar 4, 2020 at 4:29 AM Rob Vesse <rv...@dotnetrdf.org>
> >> wrote:
> >>>>>>
> >>>>>>> This may be an upstream bug or it could be a bug in how we
> configure
> >>>>>>> the underlying parser
> >>>>>>>
> >>>>>>> Jena's JSON-LD support is based upon the
> >>>>>>> https://github.com/jsonld-java/jsonld-java library so you could
> try
> >>>>>>> and reproduce your test case just using their library directly
> which
> >>> would
> >>>>>>> determine if it is their bug or our bug
> >>>>>>>
> >>>>>>> Rob
> >>>>>>>
> >>>>>>> On 04/03/2020, 00:11, "Erich Bremer" <er...@ebremer.com> wrote:
> >>>>>>>
> >>>>>>> I'm trying to use a "@id": "./" in a jsonld file and in
> another
> >>>>>>> triple
> >>>>>>> "@id": "picture.jpg". The "./" will be correctly changed to
> the
> >>>>>>> base URL,
> >>>>>>> but the "@id": "picture.jpg" just gets dropped and a blank
> node
> >> is
> >>>>>>> created. Below is the code segment that I used to generate
> this
> >>>>>>> output:
> >>>>>>> {
> >>>>>>> "@context": [
> >>>>>>> "http://schema.org"
> >>>>>>> ],
> >>>>>>> "@graph": [
> >>>>>>> {
> >>>>>>> "@type": "CreativeWork",
> >>>>>>> "@id": "picture.jpg"
> >>>>>>> },
> >>>>>>> {
> >>>>>>> "@id": "./",
> >>>>>>> "@type": "DataSet"
> >>>>>>> }
> >>>>>>> ]
> >>>>>>> }
> >>>>>>> _:Bd42dbcf4e4ffb76e199766bf5e4c1e4b <
> >>>>>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
> >>>>>>> http://schema.org/CreativeWork> .
> >>>>>>> <http://mydomain.com> <
> >>>>>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
> >>>>>>> http://schema.org/DataSet> .
> >>>>>>>
> >>>>>>> If I use https://json-ld.org/playground/ on the same jsonld,
> I
> >>> get:
> >>>>>>>
> >>>>>>> <https://json-ld.org/playground/> <
> >>>>>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
> >>>>>>> http://schema.org/DataSet>
> >>>>>>> .
> >>>>>>> <https://json-ld.org/playground/picture.jpg> <
> >>>>>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
> >>>>>>> http://schema.org/CreativeWork> .
> >>>>>>>
> >>>>>>> which is what I expected. Am I missing something here? -
> Erich
> >>>>>>>
> >>>>>>> String json = "{\n" +
> >>>>>>> " \"@context\": [\n" +
> >>>>>>> " \"http://schema.org\"\n" +
> >>>>>>> " ],\n" +
> >>>>>>> " \"@graph\": [\n" +
> >>>>>>> " {\n" +
> >>>>>>> " \"@type\": \"CreativeWork\",\n" +
> >>>>>>> " \"@id\": \"picture.jpg\"\n" +
> >>>>>>> " },\n" +
> >>>>>>> " {\n" +
> >>>>>>> " \"@id\": \"./\",\n" +
> >>>>>>> " \"@type\": \"DataSet\"\n" +
> >>>>>>> " }\n" +
> >>>>>>> " ]\n" +
> >>>>>>> "}";
> >>>>>>> System.out.println(json);
> >>>>>>> Model m = ModelFactory.createDefaultModel();
> >>>>>>> InputStream inputStream = new
> >>>>>>> ByteArrayInputStream(json.getBytes(Charset.forName("UTF-8")));
> >>>>>>> RDFParser.create()
> >>>>>>> .base("http://mydomain.com")
> >>>>>>> .source(inputStream)
> >>>>>>> .lang(RDFLanguages.JSONLD)
> >>>>>>> .parse(m);
> >>>>>>> RDFDataMgr.write(System.out, m, RDFFormat.NQUADS) ;
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>
> >>
> >
>
Re: JSONLD and base URL
Posted by Andy Seaborne <an...@apache.org>.
java.net.URI is not perfect and it is also a mixture of RFC2396, RFC3896
and some pragmatics.
Jena's own jena-iri gets it right.
// NB The argument order can catch you out.
IRI iri = IRIResolver.resolve("picture.jpg", "http://mysite.net" );
System.out.println(iri);
but jsonld-java uses java.net.URI.
Erich - please could you raise an issue with jsonld-java?
Andy
Or https://github.com/afs/iri4ld
On 04/03/2020 16:57, Erich Bremer wrote:
> Thanks for the reference Martynas! According to the section referenced,
> the following two URLs are equivalent.
>
> http://example.com
> http://example.com/
>
> I can modify my own code to do the check and fix it for myself, but I
> would think URI.resolve should treat them as equivalents and not
> mindlessly concatenate them. How the jsonld-java people or the Jena
> community, which uses jsonld-java, will have to make the call on how
> to handle it. - Erich
>
>
> On Wed, Mar 4, 2020 at 11:24 AM Martynas Jusevičius <ma...@atomgraph.com>
> wrote:
>
>> URI.resolve() will not assume anything.
>>
>> Base URI normally ends with a /. Don’t know if this is the best reference,
>> but close:
>> https://tools.ietf.org/html/rfc3986#section-6.2.3
>>
>> You need to check the URI RFC and its resolution algorithm.
>>
>> On Wed, 4 Mar 2020 at 16.57, Erich Bremer <er...@ebremer.com> wrote:
>>
>>> This also works:
>>>
>>> URI uri = new URI("http://mysite.net");
>>> System.out.println(uri.resolve("/picture.jpg"));
>>>
>>> but if no trailing "/" and no leading "/" on path will yield the
>>> concatenated http://mysite.netpicture.jpg which then gets tossed and a
>>> blank node is formed.
>>>
>>> Should URI.resolve assume a "/" if no trailing nor leading "/" is
>> present?
>>> - Erich
>>>
>>> On Wed, Mar 4, 2020 at 10:52 AM Erich Bremer <er...@ebremer.com> wrote:
>>>
>>>> The program works if I specify the base with a trailing slash as "
>>>> http://mysite.net/"
>>>> I ran through the code and the problem appears to be here:
>>>>
>>>>
>>>
>> https://github.com/jsonld-java/jsonld-java/blob/66012db2f53b009cedeae50c83b5594b9dd05e11/core/src/main/java/com/github/jsonldjava/utils/JsonLdUrl.java#L283
>>>>
>>>> In the short code segment here, you can see:
>>>> URI uri = new URI("http://mysite.net");
>>>> System.out.println(uri.resolve("picture.jpg"));
>>>>
>>>> Output:
>>>> http://mysite.netpicture.jpg
>>>>
>>>>
>>>> On Wed, Mar 4, 2020 at 10:05 AM Erich Bremer <er...@ebremer.com>
>> wrote:
>>>>
>>>>> Same thing:
>>>>> Source JSONLD
>>>>> {
>>>>> "@context": [
>>>>> "http://schema.org"
>>>>> ],
>>>>> "@graph": [
>>>>> {
>>>>> "@type": "CreativeWork",
>>>>> "@id": "picture.jpg"
>>>>> },
>>>>> {
>>>>> "@id": "./",
>>>>> "@type": "DataSet"
>>>>> }
>>>>> ]
>>>>> }
>>>>> AFTER loading
>>> ============================================================
>>>>> Base : http://mysite.net
>>>>> SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
>>>>> SLF4J: Defaulting to no-operation (NOP) logger implementation
>>>>> SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for
>>>>> further details.
>>>>> [ {
>>>>> "@type" : [ "http://schema.org/CreativeWork" ]
>>>>> }, {
>>>>> "@id" : "http://mysite.net",
>>>>> "@type" : [ "http://schema.org/DataSet" ]
>>>>> } ]
>>>>>
>>>>>
>>>>> CODE ====================================
>>>>> package com.mycompany.tesjsonld;
>>>>>
>>>>> import com.github.jsonldjava.core.JsonLdOptions;
>>>>> import com.github.jsonldjava.core.JsonLdProcessor;
>>>>> import com.github.jsonldjava.utils.JsonUtils;
>>>>> import java.io.ByteArrayInputStream;
>>>>> import java.io.FileNotFoundException;
>>>>> import java.io.IOException;
>>>>> import java.io.InputStream;
>>>>> import java.nio.charset.Charset;
>>>>>
>>>>> /**
>>>>> *
>>>>> * @author erich
>>>>> */
>>>>> public class tryme {
>>>>>
>>>>> public static void main(String[] args) throws
>> FileNotFoundException,
>>>>> IOException {
>>>>> String json = "{\n" +
>>>>> " \"@context\": [\n" +
>>>>> " \"http://schema.org\"\n" +
>>>>> " ],\n" +
>>>>> " \"@graph\": [\n" +
>>>>> " {\n" +
>>>>> " \"@type\": \"CreativeWork\",\n" +
>>>>> " \"@id\": \"picture.jpg\"\n" +
>>>>> " },\n" +
>>>>> " {\n" +
>>>>> " \"@id\": \"./\",\n" +
>>>>> " \"@type\": \"DataSet\"\n" +
>>>>> " }\n" +
>>>>> " ]\n" +
>>>>> "}";
>>>>>
>>>>> System.out.println(json);
>>>>>
>>>>>
>>>
>> System.out.println("============================================================");
>>>>> InputStream inputStream = new
>>>>> ByteArrayInputStream(json.getBytes(Charset.forName("UTF-8")));
>>>>> Object jsonObject = JsonUtils.fromInputStream(inputStream);
>>>>> JsonLdOptions options = new JsonLdOptions("http://mysite.net
>> ");
>>>>> System.out.println("Base : "+options.getBase());
>>>>> //Object compact = JsonLdProcessor.compact(jsonObject, null,
>>>>> options);
>>>>> Object compact = JsonLdProcessor.expand(jsonObject, options);
>>>>> System.out.println(JsonUtils.toPrettyString(compact));
>>>>> }
>>>>> }
>>>>>
>>>>> On Wed, Mar 4, 2020 at 9:44 AM Erich Bremer <er...@ebremer.com>
>> wrote:
>>>>>
>>>>>> I will try with the other library to check.
>>>>>>
>>>>>> On Wed, Mar 4, 2020 at 4:29 AM Rob Vesse <rv...@dotnetrdf.org>
>> wrote:
>>>>>>
>>>>>>> This may be an upstream bug or it could be a bug in how we configure
>>>>>>> the underlying parser
>>>>>>>
>>>>>>> Jena's JSON-LD support is based upon the
>>>>>>> https://github.com/jsonld-java/jsonld-java library so you could try
>>>>>>> and reproduce your test case just using their library directly which
>>> would
>>>>>>> determine if it is their bug or our bug
>>>>>>>
>>>>>>> Rob
>>>>>>>
>>>>>>> On 04/03/2020, 00:11, "Erich Bremer" <er...@ebremer.com> wrote:
>>>>>>>
>>>>>>> I'm trying to use a "@id": "./" in a jsonld file and in another
>>>>>>> triple
>>>>>>> "@id": "picture.jpg". The "./" will be correctly changed to the
>>>>>>> base URL,
>>>>>>> but the "@id": "picture.jpg" just gets dropped and a blank node
>> is
>>>>>>> created. Below is the code segment that I used to generate this
>>>>>>> output:
>>>>>>> {
>>>>>>> "@context": [
>>>>>>> "http://schema.org"
>>>>>>> ],
>>>>>>> "@graph": [
>>>>>>> {
>>>>>>> "@type": "CreativeWork",
>>>>>>> "@id": "picture.jpg"
>>>>>>> },
>>>>>>> {
>>>>>>> "@id": "./",
>>>>>>> "@type": "DataSet"
>>>>>>> }
>>>>>>> ]
>>>>>>> }
>>>>>>> _:Bd42dbcf4e4ffb76e199766bf5e4c1e4b <
>>>>>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
>>>>>>> http://schema.org/CreativeWork> .
>>>>>>> <http://mydomain.com> <
>>>>>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
>>>>>>> http://schema.org/DataSet> .
>>>>>>>
>>>>>>> If I use https://json-ld.org/playground/ on the same jsonld, I
>>> get:
>>>>>>>
>>>>>>> <https://json-ld.org/playground/> <
>>>>>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
>>>>>>> http://schema.org/DataSet>
>>>>>>> .
>>>>>>> <https://json-ld.org/playground/picture.jpg> <
>>>>>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
>>>>>>> http://schema.org/CreativeWork> .
>>>>>>>
>>>>>>> which is what I expected. Am I missing something here? - Erich
>>>>>>>
>>>>>>> String json = "{\n" +
>>>>>>> " \"@context\": [\n" +
>>>>>>> " \"http://schema.org\"\n" +
>>>>>>> " ],\n" +
>>>>>>> " \"@graph\": [\n" +
>>>>>>> " {\n" +
>>>>>>> " \"@type\": \"CreativeWork\",\n" +
>>>>>>> " \"@id\": \"picture.jpg\"\n" +
>>>>>>> " },\n" +
>>>>>>> " {\n" +
>>>>>>> " \"@id\": \"./\",\n" +
>>>>>>> " \"@type\": \"DataSet\"\n" +
>>>>>>> " }\n" +
>>>>>>> " ]\n" +
>>>>>>> "}";
>>>>>>> System.out.println(json);
>>>>>>> Model m = ModelFactory.createDefaultModel();
>>>>>>> InputStream inputStream = new
>>>>>>> ByteArrayInputStream(json.getBytes(Charset.forName("UTF-8")));
>>>>>>> RDFParser.create()
>>>>>>> .base("http://mydomain.com")
>>>>>>> .source(inputStream)
>>>>>>> .lang(RDFLanguages.JSONLD)
>>>>>>> .parse(m);
>>>>>>> RDFDataMgr.write(System.out, m, RDFFormat.NQUADS) ;
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>
>>
>
Re: JSONLD and base URL
Posted by Erich Bremer <er...@ebremer.com>.
Thanks for the reference Martynas! According to the section referenced,
the following two URLs are equivalent.
http://example.com
http://example.com/
I can modify my own code to do the check and fix it for myself, but I
would think URI.resolve should treat them as equivalents and not
mindlessly concatenate them. How the jsonld-java people or the Jena
community, which uses jsonld-java, will have to make the call on how
to handle it. - Erich
On Wed, Mar 4, 2020 at 11:24 AM Martynas Jusevičius <ma...@atomgraph.com>
wrote:
> URI.resolve() will not assume anything.
>
> Base URI normally ends with a /. Don’t know if this is the best reference,
> but close:
> https://tools.ietf.org/html/rfc3986#section-6.2.3
>
> You need to check the URI RFC and its resolution algorithm.
>
> On Wed, 4 Mar 2020 at 16.57, Erich Bremer <er...@ebremer.com> wrote:
>
> > This also works:
> >
> > URI uri = new URI("http://mysite.net");
> > System.out.println(uri.resolve("/picture.jpg"));
> >
> > but if no trailing "/" and no leading "/" on path will yield the
> > concatenated http://mysite.netpicture.jpg which then gets tossed and a
> > blank node is formed.
> >
> > Should URI.resolve assume a "/" if no trailing nor leading "/" is
> present?
> > - Erich
> >
> > On Wed, Mar 4, 2020 at 10:52 AM Erich Bremer <er...@ebremer.com> wrote:
> >
> > > The program works if I specify the base with a trailing slash as "
> > > http://mysite.net/"
> > > I ran through the code and the problem appears to be here:
> > >
> > >
> >
> https://github.com/jsonld-java/jsonld-java/blob/66012db2f53b009cedeae50c83b5594b9dd05e11/core/src/main/java/com/github/jsonldjava/utils/JsonLdUrl.java#L283
> > >
> > > In the short code segment here, you can see:
> > > URI uri = new URI("http://mysite.net");
> > > System.out.println(uri.resolve("picture.jpg"));
> > >
> > > Output:
> > > http://mysite.netpicture.jpg
> > >
> > >
> > > On Wed, Mar 4, 2020 at 10:05 AM Erich Bremer <er...@ebremer.com>
> wrote:
> > >
> > >> Same thing:
> > >> Source JSONLD
> > >> {
> > >> "@context": [
> > >> "http://schema.org"
> > >> ],
> > >> "@graph": [
> > >> {
> > >> "@type": "CreativeWork",
> > >> "@id": "picture.jpg"
> > >> },
> > >> {
> > >> "@id": "./",
> > >> "@type": "DataSet"
> > >> }
> > >> ]
> > >> }
> > >> AFTER loading
> > ============================================================
> > >> Base : http://mysite.net
> > >> SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
> > >> SLF4J: Defaulting to no-operation (NOP) logger implementation
> > >> SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for
> > >> further details.
> > >> [ {
> > >> "@type" : [ "http://schema.org/CreativeWork" ]
> > >> }, {
> > >> "@id" : "http://mysite.net",
> > >> "@type" : [ "http://schema.org/DataSet" ]
> > >> } ]
> > >>
> > >>
> > >> CODE ====================================
> > >> package com.mycompany.tesjsonld;
> > >>
> > >> import com.github.jsonldjava.core.JsonLdOptions;
> > >> import com.github.jsonldjava.core.JsonLdProcessor;
> > >> import com.github.jsonldjava.utils.JsonUtils;
> > >> import java.io.ByteArrayInputStream;
> > >> import java.io.FileNotFoundException;
> > >> import java.io.IOException;
> > >> import java.io.InputStream;
> > >> import java.nio.charset.Charset;
> > >>
> > >> /**
> > >> *
> > >> * @author erich
> > >> */
> > >> public class tryme {
> > >>
> > >> public static void main(String[] args) throws
> FileNotFoundException,
> > >> IOException {
> > >> String json = "{\n" +
> > >> " \"@context\": [\n" +
> > >> " \"http://schema.org\"\n" +
> > >> " ],\n" +
> > >> " \"@graph\": [\n" +
> > >> " {\n" +
> > >> " \"@type\": \"CreativeWork\",\n" +
> > >> " \"@id\": \"picture.jpg\"\n" +
> > >> " },\n" +
> > >> " {\n" +
> > >> " \"@id\": \"./\",\n" +
> > >> " \"@type\": \"DataSet\"\n" +
> > >> " }\n" +
> > >> " ]\n" +
> > >> "}";
> > >>
> > >> System.out.println(json);
> > >>
> > >>
> >
> System.out.println("============================================================");
> > >> InputStream inputStream = new
> > >> ByteArrayInputStream(json.getBytes(Charset.forName("UTF-8")));
> > >> Object jsonObject = JsonUtils.fromInputStream(inputStream);
> > >> JsonLdOptions options = new JsonLdOptions("http://mysite.net
> ");
> > >> System.out.println("Base : "+options.getBase());
> > >> //Object compact = JsonLdProcessor.compact(jsonObject, null,
> > >> options);
> > >> Object compact = JsonLdProcessor.expand(jsonObject, options);
> > >> System.out.println(JsonUtils.toPrettyString(compact));
> > >> }
> > >> }
> > >>
> > >> On Wed, Mar 4, 2020 at 9:44 AM Erich Bremer <er...@ebremer.com>
> wrote:
> > >>
> > >>> I will try with the other library to check.
> > >>>
> > >>> On Wed, Mar 4, 2020 at 4:29 AM Rob Vesse <rv...@dotnetrdf.org>
> wrote:
> > >>>
> > >>>> This may be an upstream bug or it could be a bug in how we configure
> > >>>> the underlying parser
> > >>>>
> > >>>> Jena's JSON-LD support is based upon the
> > >>>> https://github.com/jsonld-java/jsonld-java library so you could try
> > >>>> and reproduce your test case just using their library directly which
> > would
> > >>>> determine if it is their bug or our bug
> > >>>>
> > >>>> Rob
> > >>>>
> > >>>> On 04/03/2020, 00:11, "Erich Bremer" <er...@ebremer.com> wrote:
> > >>>>
> > >>>> I'm trying to use a "@id": "./" in a jsonld file and in another
> > >>>> triple
> > >>>> "@id": "picture.jpg". The "./" will be correctly changed to the
> > >>>> base URL,
> > >>>> but the "@id": "picture.jpg" just gets dropped and a blank node
> is
> > >>>> created. Below is the code segment that I used to generate this
> > >>>> output:
> > >>>> {
> > >>>> "@context": [
> > >>>> "http://schema.org"
> > >>>> ],
> > >>>> "@graph": [
> > >>>> {
> > >>>> "@type": "CreativeWork",
> > >>>> "@id": "picture.jpg"
> > >>>> },
> > >>>> {
> > >>>> "@id": "./",
> > >>>> "@type": "DataSet"
> > >>>> }
> > >>>> ]
> > >>>> }
> > >>>> _:Bd42dbcf4e4ffb76e199766bf5e4c1e4b <
> > >>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
> > >>>> http://schema.org/CreativeWork> .
> > >>>> <http://mydomain.com> <
> > >>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
> > >>>> http://schema.org/DataSet> .
> > >>>>
> > >>>> If I use https://json-ld.org/playground/ on the same jsonld, I
> > get:
> > >>>>
> > >>>> <https://json-ld.org/playground/> <
> > >>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
> > >>>> http://schema.org/DataSet>
> > >>>> .
> > >>>> <https://json-ld.org/playground/picture.jpg> <
> > >>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
> > >>>> http://schema.org/CreativeWork> .
> > >>>>
> > >>>> which is what I expected. Am I missing something here? - Erich
> > >>>>
> > >>>> String json = "{\n" +
> > >>>> " \"@context\": [\n" +
> > >>>> " \"http://schema.org\"\n" +
> > >>>> " ],\n" +
> > >>>> " \"@graph\": [\n" +
> > >>>> " {\n" +
> > >>>> " \"@type\": \"CreativeWork\",\n" +
> > >>>> " \"@id\": \"picture.jpg\"\n" +
> > >>>> " },\n" +
> > >>>> " {\n" +
> > >>>> " \"@id\": \"./\",\n" +
> > >>>> " \"@type\": \"DataSet\"\n" +
> > >>>> " }\n" +
> > >>>> " ]\n" +
> > >>>> "}";
> > >>>> System.out.println(json);
> > >>>> Model m = ModelFactory.createDefaultModel();
> > >>>> InputStream inputStream = new
> > >>>> ByteArrayInputStream(json.getBytes(Charset.forName("UTF-8")));
> > >>>> RDFParser.create()
> > >>>> .base("http://mydomain.com")
> > >>>> .source(inputStream)
> > >>>> .lang(RDFLanguages.JSONLD)
> > >>>> .parse(m);
> > >>>> RDFDataMgr.write(System.out, m, RDFFormat.NQUADS) ;
> > >>>>
> > >>>>
> > >>>>
> > >>>>
> > >>>>
> > >>>>
> >
>
Re: JSONLD and base URL
Posted by Martynas Jusevičius <ma...@atomgraph.com>.
URI.resolve() will not assume anything.
Base URI normally ends with a /. Don’t know if this is the best reference,
but close:
https://tools.ietf.org/html/rfc3986#section-6.2.3
You need to check the URI RFC and its resolution algorithm.
On Wed, 4 Mar 2020 at 16.57, Erich Bremer <er...@ebremer.com> wrote:
> This also works:
>
> URI uri = new URI("http://mysite.net");
> System.out.println(uri.resolve("/picture.jpg"));
>
> but if no trailing "/" and no leading "/" on path will yield the
> concatenated http://mysite.netpicture.jpg which then gets tossed and a
> blank node is formed.
>
> Should URI.resolve assume a "/" if no trailing nor leading "/" is present?
> - Erich
>
> On Wed, Mar 4, 2020 at 10:52 AM Erich Bremer <er...@ebremer.com> wrote:
>
> > The program works if I specify the base with a trailing slash as "
> > http://mysite.net/"
> > I ran through the code and the problem appears to be here:
> >
> >
> https://github.com/jsonld-java/jsonld-java/blob/66012db2f53b009cedeae50c83b5594b9dd05e11/core/src/main/java/com/github/jsonldjava/utils/JsonLdUrl.java#L283
> >
> > In the short code segment here, you can see:
> > URI uri = new URI("http://mysite.net");
> > System.out.println(uri.resolve("picture.jpg"));
> >
> > Output:
> > http://mysite.netpicture.jpg
> >
> >
> > On Wed, Mar 4, 2020 at 10:05 AM Erich Bremer <er...@ebremer.com> wrote:
> >
> >> Same thing:
> >> Source JSONLD
> >> {
> >> "@context": [
> >> "http://schema.org"
> >> ],
> >> "@graph": [
> >> {
> >> "@type": "CreativeWork",
> >> "@id": "picture.jpg"
> >> },
> >> {
> >> "@id": "./",
> >> "@type": "DataSet"
> >> }
> >> ]
> >> }
> >> AFTER loading
> ============================================================
> >> Base : http://mysite.net
> >> SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
> >> SLF4J: Defaulting to no-operation (NOP) logger implementation
> >> SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for
> >> further details.
> >> [ {
> >> "@type" : [ "http://schema.org/CreativeWork" ]
> >> }, {
> >> "@id" : "http://mysite.net",
> >> "@type" : [ "http://schema.org/DataSet" ]
> >> } ]
> >>
> >>
> >> CODE ====================================
> >> package com.mycompany.tesjsonld;
> >>
> >> import com.github.jsonldjava.core.JsonLdOptions;
> >> import com.github.jsonldjava.core.JsonLdProcessor;
> >> import com.github.jsonldjava.utils.JsonUtils;
> >> import java.io.ByteArrayInputStream;
> >> import java.io.FileNotFoundException;
> >> import java.io.IOException;
> >> import java.io.InputStream;
> >> import java.nio.charset.Charset;
> >>
> >> /**
> >> *
> >> * @author erich
> >> */
> >> public class tryme {
> >>
> >> public static void main(String[] args) throws FileNotFoundException,
> >> IOException {
> >> String json = "{\n" +
> >> " \"@context\": [\n" +
> >> " \"http://schema.org\"\n" +
> >> " ],\n" +
> >> " \"@graph\": [\n" +
> >> " {\n" +
> >> " \"@type\": \"CreativeWork\",\n" +
> >> " \"@id\": \"picture.jpg\"\n" +
> >> " },\n" +
> >> " {\n" +
> >> " \"@id\": \"./\",\n" +
> >> " \"@type\": \"DataSet\"\n" +
> >> " }\n" +
> >> " ]\n" +
> >> "}";
> >>
> >> System.out.println(json);
> >>
> >>
> System.out.println("============================================================");
> >> InputStream inputStream = new
> >> ByteArrayInputStream(json.getBytes(Charset.forName("UTF-8")));
> >> Object jsonObject = JsonUtils.fromInputStream(inputStream);
> >> JsonLdOptions options = new JsonLdOptions("http://mysite.net");
> >> System.out.println("Base : "+options.getBase());
> >> //Object compact = JsonLdProcessor.compact(jsonObject, null,
> >> options);
> >> Object compact = JsonLdProcessor.expand(jsonObject, options);
> >> System.out.println(JsonUtils.toPrettyString(compact));
> >> }
> >> }
> >>
> >> On Wed, Mar 4, 2020 at 9:44 AM Erich Bremer <er...@ebremer.com> wrote:
> >>
> >>> I will try with the other library to check.
> >>>
> >>> On Wed, Mar 4, 2020 at 4:29 AM Rob Vesse <rv...@dotnetrdf.org> wrote:
> >>>
> >>>> This may be an upstream bug or it could be a bug in how we configure
> >>>> the underlying parser
> >>>>
> >>>> Jena's JSON-LD support is based upon the
> >>>> https://github.com/jsonld-java/jsonld-java library so you could try
> >>>> and reproduce your test case just using their library directly which
> would
> >>>> determine if it is their bug or our bug
> >>>>
> >>>> Rob
> >>>>
> >>>> On 04/03/2020, 00:11, "Erich Bremer" <er...@ebremer.com> wrote:
> >>>>
> >>>> I'm trying to use a "@id": "./" in a jsonld file and in another
> >>>> triple
> >>>> "@id": "picture.jpg". The "./" will be correctly changed to the
> >>>> base URL,
> >>>> but the "@id": "picture.jpg" just gets dropped and a blank node is
> >>>> created. Below is the code segment that I used to generate this
> >>>> output:
> >>>> {
> >>>> "@context": [
> >>>> "http://schema.org"
> >>>> ],
> >>>> "@graph": [
> >>>> {
> >>>> "@type": "CreativeWork",
> >>>> "@id": "picture.jpg"
> >>>> },
> >>>> {
> >>>> "@id": "./",
> >>>> "@type": "DataSet"
> >>>> }
> >>>> ]
> >>>> }
> >>>> _:Bd42dbcf4e4ffb76e199766bf5e4c1e4b <
> >>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
> >>>> http://schema.org/CreativeWork> .
> >>>> <http://mydomain.com> <
> >>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
> >>>> http://schema.org/DataSet> .
> >>>>
> >>>> If I use https://json-ld.org/playground/ on the same jsonld, I
> get:
> >>>>
> >>>> <https://json-ld.org/playground/> <
> >>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
> >>>> http://schema.org/DataSet>
> >>>> .
> >>>> <https://json-ld.org/playground/picture.jpg> <
> >>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
> >>>> http://schema.org/CreativeWork> .
> >>>>
> >>>> which is what I expected. Am I missing something here? - Erich
> >>>>
> >>>> String json = "{\n" +
> >>>> " \"@context\": [\n" +
> >>>> " \"http://schema.org\"\n" +
> >>>> " ],\n" +
> >>>> " \"@graph\": [\n" +
> >>>> " {\n" +
> >>>> " \"@type\": \"CreativeWork\",\n" +
> >>>> " \"@id\": \"picture.jpg\"\n" +
> >>>> " },\n" +
> >>>> " {\n" +
> >>>> " \"@id\": \"./\",\n" +
> >>>> " \"@type\": \"DataSet\"\n" +
> >>>> " }\n" +
> >>>> " ]\n" +
> >>>> "}";
> >>>> System.out.println(json);
> >>>> Model m = ModelFactory.createDefaultModel();
> >>>> InputStream inputStream = new
> >>>> ByteArrayInputStream(json.getBytes(Charset.forName("UTF-8")));
> >>>> RDFParser.create()
> >>>> .base("http://mydomain.com")
> >>>> .source(inputStream)
> >>>> .lang(RDFLanguages.JSONLD)
> >>>> .parse(m);
> >>>> RDFDataMgr.write(System.out, m, RDFFormat.NQUADS) ;
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
>
Re: JSONLD and base URL
Posted by Erich Bremer <er...@ebremer.com>.
This also works:
URI uri = new URI("http://mysite.net");
System.out.println(uri.resolve("/picture.jpg"));
but if no trailing "/" and no leading "/" on path will yield the
concatenated http://mysite.netpicture.jpg which then gets tossed and a
blank node is formed.
Should URI.resolve assume a "/" if no trailing nor leading "/" is present?
- Erich
On Wed, Mar 4, 2020 at 10:52 AM Erich Bremer <er...@ebremer.com> wrote:
> The program works if I specify the base with a trailing slash as "
> http://mysite.net/"
> I ran through the code and the problem appears to be here:
>
> https://github.com/jsonld-java/jsonld-java/blob/66012db2f53b009cedeae50c83b5594b9dd05e11/core/src/main/java/com/github/jsonldjava/utils/JsonLdUrl.java#L283
>
> In the short code segment here, you can see:
> URI uri = new URI("http://mysite.net");
> System.out.println(uri.resolve("picture.jpg"));
>
> Output:
> http://mysite.netpicture.jpg
>
>
> On Wed, Mar 4, 2020 at 10:05 AM Erich Bremer <er...@ebremer.com> wrote:
>
>> Same thing:
>> Source JSONLD
>> {
>> "@context": [
>> "http://schema.org"
>> ],
>> "@graph": [
>> {
>> "@type": "CreativeWork",
>> "@id": "picture.jpg"
>> },
>> {
>> "@id": "./",
>> "@type": "DataSet"
>> }
>> ]
>> }
>> AFTER loading ============================================================
>> Base : http://mysite.net
>> SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
>> SLF4J: Defaulting to no-operation (NOP) logger implementation
>> SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for
>> further details.
>> [ {
>> "@type" : [ "http://schema.org/CreativeWork" ]
>> }, {
>> "@id" : "http://mysite.net",
>> "@type" : [ "http://schema.org/DataSet" ]
>> } ]
>>
>>
>> CODE ====================================
>> package com.mycompany.tesjsonld;
>>
>> import com.github.jsonldjava.core.JsonLdOptions;
>> import com.github.jsonldjava.core.JsonLdProcessor;
>> import com.github.jsonldjava.utils.JsonUtils;
>> import java.io.ByteArrayInputStream;
>> import java.io.FileNotFoundException;
>> import java.io.IOException;
>> import java.io.InputStream;
>> import java.nio.charset.Charset;
>>
>> /**
>> *
>> * @author erich
>> */
>> public class tryme {
>>
>> public static void main(String[] args) throws FileNotFoundException,
>> IOException {
>> String json = "{\n" +
>> " \"@context\": [\n" +
>> " \"http://schema.org\"\n" +
>> " ],\n" +
>> " \"@graph\": [\n" +
>> " {\n" +
>> " \"@type\": \"CreativeWork\",\n" +
>> " \"@id\": \"picture.jpg\"\n" +
>> " },\n" +
>> " {\n" +
>> " \"@id\": \"./\",\n" +
>> " \"@type\": \"DataSet\"\n" +
>> " }\n" +
>> " ]\n" +
>> "}";
>>
>> System.out.println(json);
>>
>> System.out.println("============================================================");
>> InputStream inputStream = new
>> ByteArrayInputStream(json.getBytes(Charset.forName("UTF-8")));
>> Object jsonObject = JsonUtils.fromInputStream(inputStream);
>> JsonLdOptions options = new JsonLdOptions("http://mysite.net");
>> System.out.println("Base : "+options.getBase());
>> //Object compact = JsonLdProcessor.compact(jsonObject, null,
>> options);
>> Object compact = JsonLdProcessor.expand(jsonObject, options);
>> System.out.println(JsonUtils.toPrettyString(compact));
>> }
>> }
>>
>> On Wed, Mar 4, 2020 at 9:44 AM Erich Bremer <er...@ebremer.com> wrote:
>>
>>> I will try with the other library to check.
>>>
>>> On Wed, Mar 4, 2020 at 4:29 AM Rob Vesse <rv...@dotnetrdf.org> wrote:
>>>
>>>> This may be an upstream bug or it could be a bug in how we configure
>>>> the underlying parser
>>>>
>>>> Jena's JSON-LD support is based upon the
>>>> https://github.com/jsonld-java/jsonld-java library so you could try
>>>> and reproduce your test case just using their library directly which would
>>>> determine if it is their bug or our bug
>>>>
>>>> Rob
>>>>
>>>> On 04/03/2020, 00:11, "Erich Bremer" <er...@ebremer.com> wrote:
>>>>
>>>> I'm trying to use a "@id": "./" in a jsonld file and in another
>>>> triple
>>>> "@id": "picture.jpg". The "./" will be correctly changed to the
>>>> base URL,
>>>> but the "@id": "picture.jpg" just gets dropped and a blank node is
>>>> created. Below is the code segment that I used to generate this
>>>> output:
>>>> {
>>>> "@context": [
>>>> "http://schema.org"
>>>> ],
>>>> "@graph": [
>>>> {
>>>> "@type": "CreativeWork",
>>>> "@id": "picture.jpg"
>>>> },
>>>> {
>>>> "@id": "./",
>>>> "@type": "DataSet"
>>>> }
>>>> ]
>>>> }
>>>> _:Bd42dbcf4e4ffb76e199766bf5e4c1e4b <
>>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
>>>> http://schema.org/CreativeWork> .
>>>> <http://mydomain.com> <
>>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
>>>> http://schema.org/DataSet> .
>>>>
>>>> If I use https://json-ld.org/playground/ on the same jsonld, I get:
>>>>
>>>> <https://json-ld.org/playground/> <
>>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
>>>> http://schema.org/DataSet>
>>>> .
>>>> <https://json-ld.org/playground/picture.jpg> <
>>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
>>>> http://schema.org/CreativeWork> .
>>>>
>>>> which is what I expected. Am I missing something here? - Erich
>>>>
>>>> String json = "{\n" +
>>>> " \"@context\": [\n" +
>>>> " \"http://schema.org\"\n" +
>>>> " ],\n" +
>>>> " \"@graph\": [\n" +
>>>> " {\n" +
>>>> " \"@type\": \"CreativeWork\",\n" +
>>>> " \"@id\": \"picture.jpg\"\n" +
>>>> " },\n" +
>>>> " {\n" +
>>>> " \"@id\": \"./\",\n" +
>>>> " \"@type\": \"DataSet\"\n" +
>>>> " }\n" +
>>>> " ]\n" +
>>>> "}";
>>>> System.out.println(json);
>>>> Model m = ModelFactory.createDefaultModel();
>>>> InputStream inputStream = new
>>>> ByteArrayInputStream(json.getBytes(Charset.forName("UTF-8")));
>>>> RDFParser.create()
>>>> .base("http://mydomain.com")
>>>> .source(inputStream)
>>>> .lang(RDFLanguages.JSONLD)
>>>> .parse(m);
>>>> RDFDataMgr.write(System.out, m, RDFFormat.NQUADS) ;
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
Re: JSONLD and base URL
Posted by Erich Bremer <er...@ebremer.com>.
The program works if I specify the base with a trailing slash as "
http://mysite.net/"
I ran through the code and the problem appears to be here:
https://github.com/jsonld-java/jsonld-java/blob/66012db2f53b009cedeae50c83b5594b9dd05e11/core/src/main/java/com/github/jsonldjava/utils/JsonLdUrl.java#L283
In the short code segment here, you can see:
URI uri = new URI("http://mysite.net");
System.out.println(uri.resolve("picture.jpg"));
Output:
http://mysite.netpicture.jpg
On Wed, Mar 4, 2020 at 10:05 AM Erich Bremer <er...@ebremer.com> wrote:
> Same thing:
> Source JSONLD
> {
> "@context": [
> "http://schema.org"
> ],
> "@graph": [
> {
> "@type": "CreativeWork",
> "@id": "picture.jpg"
> },
> {
> "@id": "./",
> "@type": "DataSet"
> }
> ]
> }
> AFTER loading ============================================================
> Base : http://mysite.net
> SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
> SLF4J: Defaulting to no-operation (NOP) logger implementation
> SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further
> details.
> [ {
> "@type" : [ "http://schema.org/CreativeWork" ]
> }, {
> "@id" : "http://mysite.net",
> "@type" : [ "http://schema.org/DataSet" ]
> } ]
>
>
> CODE ====================================
> package com.mycompany.tesjsonld;
>
> import com.github.jsonldjava.core.JsonLdOptions;
> import com.github.jsonldjava.core.JsonLdProcessor;
> import com.github.jsonldjava.utils.JsonUtils;
> import java.io.ByteArrayInputStream;
> import java.io.FileNotFoundException;
> import java.io.IOException;
> import java.io.InputStream;
> import java.nio.charset.Charset;
>
> /**
> *
> * @author erich
> */
> public class tryme {
>
> public static void main(String[] args) throws FileNotFoundException,
> IOException {
> String json = "{\n" +
> " \"@context\": [\n" +
> " \"http://schema.org\"\n" +
> " ],\n" +
> " \"@graph\": [\n" +
> " {\n" +
> " \"@type\": \"CreativeWork\",\n" +
> " \"@id\": \"picture.jpg\"\n" +
> " },\n" +
> " {\n" +
> " \"@id\": \"./\",\n" +
> " \"@type\": \"DataSet\"\n" +
> " }\n" +
> " ]\n" +
> "}";
>
> System.out.println(json);
>
> System.out.println("============================================================");
> InputStream inputStream = new
> ByteArrayInputStream(json.getBytes(Charset.forName("UTF-8")));
> Object jsonObject = JsonUtils.fromInputStream(inputStream);
> JsonLdOptions options = new JsonLdOptions("http://mysite.net");
> System.out.println("Base : "+options.getBase());
> //Object compact = JsonLdProcessor.compact(jsonObject, null,
> options);
> Object compact = JsonLdProcessor.expand(jsonObject, options);
> System.out.println(JsonUtils.toPrettyString(compact));
> }
> }
>
> On Wed, Mar 4, 2020 at 9:44 AM Erich Bremer <er...@ebremer.com> wrote:
>
>> I will try with the other library to check.
>>
>> On Wed, Mar 4, 2020 at 4:29 AM Rob Vesse <rv...@dotnetrdf.org> wrote:
>>
>>> This may be an upstream bug or it could be a bug in how we configure the
>>> underlying parser
>>>
>>> Jena's JSON-LD support is based upon the
>>> https://github.com/jsonld-java/jsonld-java library so you could try and
>>> reproduce your test case just using their library directly which would
>>> determine if it is their bug or our bug
>>>
>>> Rob
>>>
>>> On 04/03/2020, 00:11, "Erich Bremer" <er...@ebremer.com> wrote:
>>>
>>> I'm trying to use a "@id": "./" in a jsonld file and in another
>>> triple
>>> "@id": "picture.jpg". The "./" will be correctly changed to the
>>> base URL,
>>> but the "@id": "picture.jpg" just gets dropped and a blank node is
>>> created. Below is the code segment that I used to generate this
>>> output:
>>> {
>>> "@context": [
>>> "http://schema.org"
>>> ],
>>> "@graph": [
>>> {
>>> "@type": "CreativeWork",
>>> "@id": "picture.jpg"
>>> },
>>> {
>>> "@id": "./",
>>> "@type": "DataSet"
>>> }
>>> ]
>>> }
>>> _:Bd42dbcf4e4ffb76e199766bf5e4c1e4b <
>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
>>> http://schema.org/CreativeWork> .
>>> <http://mydomain.com> <
>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
>>> http://schema.org/DataSet> .
>>>
>>> If I use https://json-ld.org/playground/ on the same jsonld, I get:
>>>
>>> <https://json-ld.org/playground/> <
>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
>>> http://schema.org/DataSet>
>>> .
>>> <https://json-ld.org/playground/picture.jpg> <
>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
>>> http://schema.org/CreativeWork> .
>>>
>>> which is what I expected. Am I missing something here? - Erich
>>>
>>> String json = "{\n" +
>>> " \"@context\": [\n" +
>>> " \"http://schema.org\"\n" +
>>> " ],\n" +
>>> " \"@graph\": [\n" +
>>> " {\n" +
>>> " \"@type\": \"CreativeWork\",\n" +
>>> " \"@id\": \"picture.jpg\"\n" +
>>> " },\n" +
>>> " {\n" +
>>> " \"@id\": \"./\",\n" +
>>> " \"@type\": \"DataSet\"\n" +
>>> " }\n" +
>>> " ]\n" +
>>> "}";
>>> System.out.println(json);
>>> Model m = ModelFactory.createDefaultModel();
>>> InputStream inputStream = new
>>> ByteArrayInputStream(json.getBytes(Charset.forName("UTF-8")));
>>> RDFParser.create()
>>> .base("http://mydomain.com")
>>> .source(inputStream)
>>> .lang(RDFLanguages.JSONLD)
>>> .parse(m);
>>> RDFDataMgr.write(System.out, m, RDFFormat.NQUADS) ;
>>>
>>>
>>>
>>>
>>>
>>>
Re: JSONLD and base URL
Posted by Erich Bremer <er...@ebremer.com>.
Same thing:
Source JSONLD
{
"@context": [
"http://schema.org"
],
"@graph": [
{
"@type": "CreativeWork",
"@id": "picture.jpg"
},
{
"@id": "./",
"@type": "DataSet"
}
]
}
AFTER loading ============================================================
Base : http://mysite.net
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further
details.
[ {
"@type" : [ "http://schema.org/CreativeWork" ]
}, {
"@id" : "http://mysite.net",
"@type" : [ "http://schema.org/DataSet" ]
} ]
CODE ====================================
package com.mycompany.tesjsonld;
import com.github.jsonldjava.core.JsonLdOptions;
import com.github.jsonldjava.core.JsonLdProcessor;
import com.github.jsonldjava.utils.JsonUtils;
import java.io.ByteArrayInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
/**
*
* @author erich
*/
public class tryme {
public static void main(String[] args) throws FileNotFoundException,
IOException {
String json = "{\n" +
" \"@context\": [\n" +
" \"http://schema.org\"\n" +
" ],\n" +
" \"@graph\": [\n" +
" {\n" +
" \"@type\": \"CreativeWork\",\n" +
" \"@id\": \"picture.jpg\"\n" +
" },\n" +
" {\n" +
" \"@id\": \"./\",\n" +
" \"@type\": \"DataSet\"\n" +
" }\n" +
" ]\n" +
"}";
System.out.println(json);
System.out.println("============================================================");
InputStream inputStream = new
ByteArrayInputStream(json.getBytes(Charset.forName("UTF-8")));
Object jsonObject = JsonUtils.fromInputStream(inputStream);
JsonLdOptions options = new JsonLdOptions("http://mysite.net");
System.out.println("Base : "+options.getBase());
//Object compact = JsonLdProcessor.compact(jsonObject, null,
options);
Object compact = JsonLdProcessor.expand(jsonObject, options);
System.out.println(JsonUtils.toPrettyString(compact));
}
}
On Wed, Mar 4, 2020 at 9:44 AM Erich Bremer <er...@ebremer.com> wrote:
> I will try with the other library to check.
>
> On Wed, Mar 4, 2020 at 4:29 AM Rob Vesse <rv...@dotnetrdf.org> wrote:
>
>> This may be an upstream bug or it could be a bug in how we configure the
>> underlying parser
>>
>> Jena's JSON-LD support is based upon the
>> https://github.com/jsonld-java/jsonld-java library so you could try and
>> reproduce your test case just using their library directly which would
>> determine if it is their bug or our bug
>>
>> Rob
>>
>> On 04/03/2020, 00:11, "Erich Bremer" <er...@ebremer.com> wrote:
>>
>> I'm trying to use a "@id": "./" in a jsonld file and in another triple
>> "@id": "picture.jpg". The "./" will be correctly changed to the base
>> URL,
>> but the "@id": "picture.jpg" just gets dropped and a blank node is
>> created. Below is the code segment that I used to generate this
>> output:
>> {
>> "@context": [
>> "http://schema.org"
>> ],
>> "@graph": [
>> {
>> "@type": "CreativeWork",
>> "@id": "picture.jpg"
>> },
>> {
>> "@id": "./",
>> "@type": "DataSet"
>> }
>> ]
>> }
>> _:Bd42dbcf4e4ffb76e199766bf5e4c1e4b <
>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
>> http://schema.org/CreativeWork> .
>> <http://mydomain.com> <
>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
>> http://schema.org/DataSet> .
>>
>> If I use https://json-ld.org/playground/ on the same jsonld, I get:
>>
>> <https://json-ld.org/playground/> <
>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
>> http://schema.org/DataSet>
>> .
>> <https://json-ld.org/playground/picture.jpg> <
>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
>> http://schema.org/CreativeWork> .
>>
>> which is what I expected. Am I missing something here? - Erich
>>
>> String json = "{\n" +
>> " \"@context\": [\n" +
>> " \"http://schema.org\"\n" +
>> " ],\n" +
>> " \"@graph\": [\n" +
>> " {\n" +
>> " \"@type\": \"CreativeWork\",\n" +
>> " \"@id\": \"picture.jpg\"\n" +
>> " },\n" +
>> " {\n" +
>> " \"@id\": \"./\",\n" +
>> " \"@type\": \"DataSet\"\n" +
>> " }\n" +
>> " ]\n" +
>> "}";
>> System.out.println(json);
>> Model m = ModelFactory.createDefaultModel();
>> InputStream inputStream = new
>> ByteArrayInputStream(json.getBytes(Charset.forName("UTF-8")));
>> RDFParser.create()
>> .base("http://mydomain.com")
>> .source(inputStream)
>> .lang(RDFLanguages.JSONLD)
>> .parse(m);
>> RDFDataMgr.write(System.out, m, RDFFormat.NQUADS) ;
>>
>>
>>
>>
>>
>>
Re: JSONLD and base URL
Posted by Erich Bremer <er...@ebremer.com>.
I will try with the other library to check.
On Wed, Mar 4, 2020 at 4:29 AM Rob Vesse <rv...@dotnetrdf.org> wrote:
> This may be an upstream bug or it could be a bug in how we configure the
> underlying parser
>
> Jena's JSON-LD support is based upon the
> https://github.com/jsonld-java/jsonld-java library so you could try and
> reproduce your test case just using their library directly which would
> determine if it is their bug or our bug
>
> Rob
>
> On 04/03/2020, 00:11, "Erich Bremer" <er...@ebremer.com> wrote:
>
> I'm trying to use a "@id": "./" in a jsonld file and in another triple
> "@id": "picture.jpg". The "./" will be correctly changed to the base
> URL,
> but the "@id": "picture.jpg" just gets dropped and a blank node is
> created. Below is the code segment that I used to generate this
> output:
> {
> "@context": [
> "http://schema.org"
> ],
> "@graph": [
> {
> "@type": "CreativeWork",
> "@id": "picture.jpg"
> },
> {
> "@id": "./",
> "@type": "DataSet"
> }
> ]
> }
> _:Bd42dbcf4e4ffb76e199766bf5e4c1e4b <
> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
> http://schema.org/CreativeWork> .
> <http://mydomain.com> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>
> <
> http://schema.org/DataSet> .
>
> If I use https://json-ld.org/playground/ on the same jsonld, I get:
>
> <https://json-ld.org/playground/> <
> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
> http://schema.org/DataSet>
> .
> <https://json-ld.org/playground/picture.jpg> <
> http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
> http://schema.org/CreativeWork> .
>
> which is what I expected. Am I missing something here? - Erich
>
> String json = "{\n" +
> " \"@context\": [\n" +
> " \"http://schema.org\"\n" +
> " ],\n" +
> " \"@graph\": [\n" +
> " {\n" +
> " \"@type\": \"CreativeWork\",\n" +
> " \"@id\": \"picture.jpg\"\n" +
> " },\n" +
> " {\n" +
> " \"@id\": \"./\",\n" +
> " \"@type\": \"DataSet\"\n" +
> " }\n" +
> " ]\n" +
> "}";
> System.out.println(json);
> Model m = ModelFactory.createDefaultModel();
> InputStream inputStream = new
> ByteArrayInputStream(json.getBytes(Charset.forName("UTF-8")));
> RDFParser.create()
> .base("http://mydomain.com")
> .source(inputStream)
> .lang(RDFLanguages.JSONLD)
> .parse(m);
> RDFDataMgr.write(System.out, m, RDFFormat.NQUADS) ;
>
>
>
>
>
>
Re: JSONLD and base URL
Posted by Rob Vesse <rv...@dotnetrdf.org>.
This may be an upstream bug or it could be a bug in how we configure the underlying parser
Jena's JSON-LD support is based upon the https://github.com/jsonld-java/jsonld-java library so you could try and reproduce your test case just using their library directly which would determine if it is their bug or our bug
Rob
On 04/03/2020, 00:11, "Erich Bremer" <er...@ebremer.com> wrote:
I'm trying to use a "@id": "./" in a jsonld file and in another triple
"@id": "picture.jpg". The "./" will be correctly changed to the base URL,
but the "@id": "picture.jpg" just gets dropped and a blank node is
created. Below is the code segment that I used to generate this output:
{
"@context": [
"http://schema.org"
],
"@graph": [
{
"@type": "CreativeWork",
"@id": "picture.jpg"
},
{
"@id": "./",
"@type": "DataSet"
}
]
}
_:Bd42dbcf4e4ffb76e199766bf5e4c1e4b <
http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
http://schema.org/CreativeWork> .
<http://mydomain.com> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
http://schema.org/DataSet> .
If I use https://json-ld.org/playground/ on the same jsonld, I get:
<https://json-ld.org/playground/> <
http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://schema.org/DataSet>
.
<https://json-ld.org/playground/picture.jpg> <
http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
http://schema.org/CreativeWork> .
which is what I expected. Am I missing something here? - Erich
String json = "{\n" +
" \"@context\": [\n" +
" \"http://schema.org\"\n" +
" ],\n" +
" \"@graph\": [\n" +
" {\n" +
" \"@type\": \"CreativeWork\",\n" +
" \"@id\": \"picture.jpg\"\n" +
" },\n" +
" {\n" +
" \"@id\": \"./\",\n" +
" \"@type\": \"DataSet\"\n" +
" }\n" +
" ]\n" +
"}";
System.out.println(json);
Model m = ModelFactory.createDefaultModel();
InputStream inputStream = new
ByteArrayInputStream(json.getBytes(Charset.forName("UTF-8")));
RDFParser.create()
.base("http://mydomain.com")
.source(inputStream)
.lang(RDFLanguages.JSONLD)
.parse(m);
RDFDataMgr.write(System.out, m, RDFFormat.NQUADS) ;