I guess I am turning into more of a power-user.   Nonetheless, I have had some 
problems using exec() with SPARQL statements where the GRAPH URI is a variable. 
  In this case, I must use { GRAPH ?? { ?? mesh:altLabel ?? } } for instance as 
below.   I also see no way to specify the language code when I am updating 
strings in this way except for sprintf() and then SPARQL_EVAL - I do not think 
old_label carries a language.   Advice is appreciated, but not expected.

Note that I do not really need the loop for rdfs:label, but I will need it 
later for a custom subProperty of rdfs:label which is meshv:altLabel which does 
have cardinality >1.

CREATE PROCEDURE meshrdf_prefix_label(in graph_uri varchar, in subj_uri 
varchar, in prefix varchar) {
    DECLARE state, msg, descs, chandle, arow any;

    state := '00000';
    exec('SPARQL PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
          SELECT ?label WHERE { GRAPH ?? { ?? rdfs:label ?label . 
FILTER(lang(?label) = \'en\') } }',
         state, msg, vector(graph_uri, subj_uri), 100, descs, null, chandle);

    IF (state <> '00000')
        signal(state, msg);

    WHILE (exec_next(chandle, state, msg, arow) = 0) {
        IF (state <> '00000')
            signal(state, msg);

        DECLARE old_label, new_label varchar;
        old_label := arow[0];
        new_label := sprintf('%S %S', prefix, old_label);

        DECLARE stmt varchar;

        stmt := sprintf('SPARQL PREFIX rdfs: 
<http://www.w3.org/2000/01/rdf-schema#>
                         WITH <%S> DELETE { <%S> rdfs:label "%S"@en } INSERT { 
<%S> rdfs:label "%S"@en }',
                        graph_uri, subj_uri, old_label, subj_uri, new_label);

        exec(stmt, state, msg, vector(), 1, null, null);
        IF (state <> '00000')
            signal(state, msg);

    }
    exec_close(chandle);
}

Dan Davis, Systems/Applications Architect (Contractor),
Office of Computer and Communications Systems,
National Library of Medicine, NIH

------------------------------------------------------------------------------
_______________________________________________
Virtuoso-users mailing list
Virtuoso-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/virtuoso-users

Reply via email to