%META:TOPICPARENT{name="VirtTipsAndTricksGuide"}% ---+ 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` %TOC% ---++ 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 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 [[http://uriburner.com/c/MBGD7Y][live results of this query]]. ---+++ Example showing an expression used inside an INSERT query SPARQL INSERT INTO GRAPH { ?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 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 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 { ?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 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 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. ---++Related * [[VirtTipsAndTricksGuide][Virtuoso Tips and Tricks Collection]] * [[http://docs.openlinksw.com/virtuoso/rdfsparql.html][Virtuoso Documentation]]