Virtuoso Open-Source Edition

  • Topic
  • Discussion
  • 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.
    

    Related