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 <rve...@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) ; >>>> >>>> >>>> >>>> >>>> >>>>