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