Using Expressions inside SPARQL CONSTRUCT {...}
, INSERT {...}
, or DELETE {...}
statements
The are times when you may want to post-process existing RDF triples, en route to creating enhanced data views.
For instance, you may want to enhance the literal values associated with annotation properties such as rdfs:label
and rdfs:comment
.
You can do this in CONSTRUCT {...}
, INSERT {...}
, or DELETE {...}
construction templates, by including expressions wrapped in back-ticks, i.e.
--
`expression`
Examples
Here some SPARQL 1.1 Update Language examples showcasing how this is achieved using Virtuoso.
Example showing an expression used inside a CONSTRUCT query
CONSTRUCT { ?inst rdfs:label `bif:concat ( ?inst_label, " Instance with up to ", str(?core_val), " logical processor cores and " , str(?sess_val) , " concurrent ODBC sessions from licensed host" )` } FROM <http://uda.openlinksw.com/pricing/> WHERE { ?inst a gr:Individual , oplweb:ProductLicense ; rdfs:label ?inst_label ; oplweb:hasMaximumProcessorCores ?core ; oplweb:hasSessions ?sess . ?core a gr:QuantitativeValueInteger ; gr:hasMaxValueInteger ?core_val . ?sess a gr:QuantitativeValueInteger ; gr:hasValue ?sess_val . }
You can see live results of this query.
Example showing an expression used inside an INSERT query
SPARQL INSERT INTO GRAPH <urn:mygraph> { ?inst rdfs:label `bif:concat ( ?inst_label, " Instance with up to ", str(?core_val), " logical processor cores and " , str(?sess_val) , " concurrent ODBC sessions from licensed host" )` } FROM <http://uda.openlinksw.com/pricing/> WHERE { ?inst a gr:Individual , oplweb:ProductLicense ; rdfs:label ?inst_label ; oplweb:hasMaximumProcessorCores ?core ; oplweb:hasSessions ?sess . ?core a gr:QuantitativeValueInteger ; gr:hasMaxValueInteger ?core_val . ?sess a gr:QuantitativeValueInteger ; gr:hasValue ?sess_val . }; Done. -- 406 msec. SQL> SPARQL SELECT ?label FROM <urn:mygraph> WHERE { ?inst rdfs:label ?label }; label VARCHAR _______________________________________________________________________________ ODBC Driver (Single-Tier Express Edition) Instance with up to 16 logical processor cores and 5 concurrent ODBC sessions from licensed host ODBC Driver (Single-Tier Express Edition) Instance with up to 16 logical processor cores and 5 concurrent ODBC sessions from licensed host ODBC Driver (Single-Tier Lite Edition) Instance with up to 16 logical processor cores and 5 concurrent ODBC sessions from licensed host ODBC Driver (Single-Tier Lite Edition) Instance with up to 16 logical processor cores and 5 concurrent ODBC sessions from licensed host ODBC Driver (Single-Tier Lite Edition) Instance with up to 16 logical processor cores and 5 concurrent ODBC sessions from licensed host ODBC Driver (Single-Tier Lite Edition) Instance with up to 16 logical processor cores and 5 concurrent ODBC sessions from licensed host JDBC Driver (Single-Tier Lite Edition) Instance with up to 16 logical processor cores and 5 concurrent ODBC sessions from licensed host OLEDB Driver (Single-Tier Lite Edition) Instance with up to 16 logical processor cores and 5 concurrent ODBC sessions from licensed host ADO.NET Driver (Single-Tier Lite Edition) Instance with up to 16 logical processor cores and 5 concurrent ODBC sessions from licensed host 9 Rows. -- 31 msec.
Example showing an expression used inside a DELETE query
SPARQL DELETE FROM GRAPH <urn:mygraph> { ?inst rdfs:label `bif:concat ( "JDBC Driver (Single-Tier Lite Edition) Instance with up to ", str(?core_val), " logical processor cores and ", str(?sess_val), " concurrent ODBC sessions from licensed host" )` } FROM <http://uda.openlinksw.com/pricing/> WHERE { ?inst a gr:Individual , oplweb:ProductLicense ; rdfs:label ?inst_label ; oplweb:hasMaximumProcessorCores ?core ; oplweb:hasSessions ?sess . FILTER ( regex ( ?inst_label, "JDBC Driver" ) ) . ?core a gr:QuantitativeValueInteger ; gr:hasMaxValueInteger ?core_val . ?sess a gr:QuantitativeValueInteger ; gr:hasValue ?sess_val . }; Done. -- 32 msec. SQL> SPARQL SELECT ?label FROM <urn:mygraph> WHERE { ?inst rdfs:label ?label }; label VARCHAR _______________________________________________________________________________ ODBC Driver (Single-Tier Express Edition) Instance with up to 16 logical ... ODBC Driver (Single-Tier Express Edition) Instance with up to 16 logical ... ODBC Driver (Single-Tier Lite Edition) Instance with up to 16 logical processor ... ODBC Driver (Single-Tier Lite Edition) Instance with up to 16 logical processor ... ODBC Driver (Single-Tier Lite Edition) Instance with up to 16 logical processor ... ODBC Driver (Single-Tier Lite Edition) Instance with up to 16 logical processor ... OLEDB Driver (Single-Tier Lite Edition) Instance with up to 16 logical processor ... ADO.NET Driver (Single-Tier Lite Edition) Instance with up to 16 logical processor ... 8 Rows. -- 16 msec.