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

Reply via email to