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