On 12/01/2017 11:33, Rob Vesse wrote: > Why are you using literals to represent URIs? > > Most people would just use URIs since they are first-class citizens in the > RDF datamodel. It seems like you are forcing yourself through unnecessary > hoops
It's representing an endpoint to access a value in a webservice, i.e. http://domain.com/customer/value or to modify the status of a particular element http://domain.com/item/switch/on Thanks. > Rob > > On 12/01/2017 10:15, "George News" <george.n...@gmx.net> wrote: > > BTW I think I found a bug: > > String b = "http://datypic.com/fraf1"; > Literal a = (Literal) ResourceFactory.createTypedLiteral(b, > XSDDatatype.XSDanyURI); > System.out.println(a.getDatatype()); > System.out.println(a.getValue().getClass()); > > a = (Literal) ResourceFactory.createTypedLiteral(URI.create(b)); > System.out.println(a.getDatatype()); > System.out.println(a.getValue().getClass()); > > Output: > Datatype[http://www.w3.org/2001/XMLSchema#anyURI -> class java.net.URI] > class java.lang.String > Datatype[http://www.w3.org/2001/XMLSchema#anyURI -> class java.net.URI] > class java.net.URI > > Shouldn't both getValue() be java.net.URI? I guess this needs to be fixed > as in both cases the DataType indicastes it's an URI, so when casting the > String to URI the system complains ;) > > Regards, > Jorge > > > > > On 12/01/2017 10:48, George News wrote: > > > > On 12/01/2017 9:58, Chris Dollin wrote: > >> > >> > >> On 12/01/17 08:41, George News wrote: > >>> > >>> > >>> On 11/01/2017 18:17, A. Soroka wrote: > >>>> And I and Chris Dollin answered your question. Again, > >>>> > >>>> > ResourceFactory.createTypedLiteral("http://hola^^http://www.w3.org/2001/XMSchema#anyURI", > >>>> XSDDatatype.XSDanyURI) > >>>> > >>>> Don't do a bunch of string processing. > >>> > >>> As I said there is no way of getting only "http://hola" which is the > >>> value. I don't know what I'm doing wrong but cannot get it. > >>> > >>> Example with all possible functions: > >>> String b = "http://hola^^http://www.w3.org/2001/XMLSchema#anyURI"; > >> > >>> Literal a = (Literal) ResourceFactory.createTypedLiteral(b, > >>> XSDDatatype.XSDanyURI); > >> > >> The literal's lexical form had a type in it. > >> > >>> System.out.println(a.getDatatype()); > >>> System.out.println(a.getLexicalForm()); > >> > >> And so when you ask for the lexical form, the type comes out with it. > > > > Fully understand it but if you check the toString() output it > > concatenates both ;) Which from what you later explain I understand. > > > >>> System.out.println(a.getDatatypeURI()); > >>> System.out.println(a.getString()); > >>> System.out.println(a.getValue()); > >>> System.out.println(a.toString()); > >>> > >>> Output: > >>> Datatype[http://www.w3.org/2001/XMLSchema#anyURI -> class > java.net.URI] > >>> http://datypic.com/fraf1^^http://www.w3.org/2001/XMLSchema#anyURI > >>> http://www.w3.org/2001/XMLSchema#anyURI > >>> http://datypic.com/fraf1^^http://www.w3.org/2001/XMLSchema#anyURI > >>> http://datypic.com/fraf1^^http://www.w3.org/2001/XMLSchema#anyURI > >>> > http://datypic.com/fraf1^^http://www.w3.org/2001/XMLSchema#anyURI^^http://www.w3.org/2001/XMLSchema#anyURI > >>> > >>> > >>> If I run the same code using a integer: > >>> a = > >>> > ResourceFactory.createTypedLiteral("\"5\"^^http://www.w3.org/2001/XMLSchema#int", > >>> XSDDatatype.XSDint); > >>> > >>> I get an exception: org.apache.jena.datatypes.DatatypeFormatException. > >> > >> Because the xsd:int datatype checks the lexical form of the literal > >> (and it looks like either xsd:anyURI doesn't, or b's value is in > >> fact a legal URI). > >> > >>> I'm suggesting there should be a function like > >>> createTypedLiteral(String literal) where > >>> literal is a well-formatted literal. Then using the parsing from ^^ > >> internally will be > >>> able to extract the type and somehow obtain the same outcome as the > >> createTypedLiteral(String, Datatype) function. > >>> > >>> I guess that internally there should be such a function. > >> > >> Maybe there should be but I don't know if there is one. Code for > >> parsing Turtle literals is probably embedded in the Turtle > >> parser rather than being exposed, but it might be available. > > > > That's what I meant ;) I finally explained myself > > > >> WHat bigger problem are you trying ro solve that led you to > >> try and construct an anyURI literal from a lexicalForm^^typeName > string? > > > > I'm getting this data from a Webservice and I wanted to parse it. But I > > have just realized that maybe it is the webservice the one that should > > be doing it by properly returning the URI. In the webservice is where > > the model is managed. > > > >> > >> Chris > >> > > > > > > > >