Andy - done. On Wed, Mar 4, 2020 at 12:25 PM Andy Seaborne <a...@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 < > marty...@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 <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) ; > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>> > >> > > >