Apply literal type to object in INSERT query

Viewed 12

In a certain knowledge graph there is a large number of individuals that need to be assigned a literal token of the type xsd:token. It is not practical to do so manually, therefore I am trying with an INSERT instruction. However, I can't find a way to assign the desired literal type in that kind of query.

Consider in first place this basic example knowledge graph:

@prefix : <http://my.example.web/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

:1 a foaf:Person ;
    foaf:name "Jane Doe" .

:2 a foaf:Person ;
    foaf:name "John Smith" .

The exercise would be to add a token created by removing the blank spaces from the foaf:name literal. For the :1 this would translate into the addition of the triple:

:1 dcterms:identifier "JaneDoe"^^xsd:token .

With a SELECT query I can archive it the following way:

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
PREFIX foaf: <http://xmlns.com/foaf/0.1/> 

SELECT STRDT(?token, xsd:token)
WHERE {
    GRAPH <http://my.example.web/> {
        ?s foaf:name ?name .
        BIND(REPLACE(STR(?name)," ","") AS ?token) .
    }
}

Which produces the result:

LONG VARCHAR
_______________________________________________________________________________

JaneDoe
JohnSmith

2 Rows. -- 54 msec.

Now using the same formulation, but with an INSERT query:

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
PREFIX foaf: <http://xmlns.com/foaf/0.1/> 
PREFIX dcterms: <http://purl.org/dc/terms/>

INSERT 
{
    GRAPH <http://my.example.web/> {
        ?s dcterms:identifier STRDT(?token, xsd:token) .
    }
}
WHERE {
    GRAPH <http://my.example.web/> {
        ?s foaf:name ?name .
        BIND(REPLACE(STR(?name)," ","") AS ?token) .
    }
}

An error is the result:

*** Error 37000: [Virtuoso Driver][Virtuoso Server]SQ074: Line 17 (line 17 of "(console)"): SP030: SPARQL compiler, line 9: syntax error at 'STRDT' before '('

In essence I need a way to apply the STRDT function to the object of a triple inside the INSERT clause. Or any other alternative mechanism allowing to set a literal type in this kind of query.

0 Answers
Related