Thank you all for the clarifications!

It was confusing that the API created xsd:int by default, but this seems to 
work:
propertyShape.addLiteral(SH.order, 
ResourceFactory.createTypedLiteral(String.valueOf(order),XSDDatatype.XSDinteger));
               

-----Original Message-----
From: Andy Seaborne <[email protected]> 
Sent: keskiviikko 12. kesäkuuta 2019 15.53
To: [email protected]
Subject: Re: Creating plain numeric literals using jena

The parser (Turtle, SPARQL) does the magic (not that is very magic)

The turtle parse gets a token INTEGER and it calls

NodeFactory.createLiteral(lexical, XSDDatatype.XSDinteger) ;

All literals are typed in RDF 1.1

"abc" is "abc"^^xsd:string
2 is "2"^^xsd:integer

Once out the parser, it is a java object for "2"^^xsd:integer

JSON-LD is similar but the parser is a 3rd party jsonld-java.

(parsing happens at the lower Graph-triple-node level)

In Model-Statement:

ResourceFactory.createTypedLiteral

or

model.createTypedLiteral(long)
model.createTypedLiteral( String lxecicalform , RDFDatatype dType)

     Andy


On 12/06/2019 13:44, Miika Alonen wrote:
> How do this syntactic sugar actually work? It also works in json-ld so it not 
> just turtle.
> 
> I can achieve the same result using SPARQL:
> 
>          Model model = ModelFactory.createDefaultModel();
>          String update = "PREFIX ns: <http://example.org/ns#> INSERT DATA { 
> ns:foo ns:bar 1 . } ";
>          UpdateAction.parseExecute( update, model );
>          model.write( System.out, "TTL" );
> 
> ... but I would prefer Jena API if possible.
> 
> -----Original Message-----
> From: Martynas Jusevičius <[email protected]>
> Sent: keskiviikko 12. kesäkuuta 2019 15.22
> To: jena-users-ml <[email protected]>
> Subject: Re: Creating plain numeric literals using jena
> 
> AFAIK there are no "plain numeric literals". That's just syntactic sugar for 
> numbers in Turtle: https://www.w3.org/TR/turtle/#abbrev
> 
> The semantics of both forms are the same, so does it really matter?
> 
> On Wed, Jun 12, 2019 at 2:07 PM Miika Alonen <[email protected]> wrote:
>>
>> Hi,
>>
>> I have existing system that uses plain numeric literals in graphs like:
>>
>> ex:prop sh:order 2 .
>>
>> I'v been trying to add new literals using jena, but don't know how to create 
>> plain numeric literals. I tried this and it is working for Booleans but not 
>> Integers:
>>
>> propShape.addLiteral(SH.order, 4)
>> propShape.addLiteral(SH.closed, true)
>>
>> Result:
>> ex:prop sh:order    "4"^^xsd:long .
>> ex:prop sh:closed true .
>>
>> Expected result:
>> ex:prop sh:order 4 .
>> ex:prop sh:closed true .
>>
>> Is there a way to create these kind of numerical plain literals in Jena?
>>
>> Br, Miika

Reply via email to