On 10/24/16 12:00 PM, Davis, Daniel (NIH/NLM) [C] wrote:
>
> Kingsley,
>
>  
>
> I’m not sure exactly how this helps me.   Let me be clearer on the
> problem.   Because this application runs within a federal government
> site, I’m required to submit my source code to static analysis.  
> Although the data is read-only, and the database user has only
> read-only access, there are still general guidelines.
>
> I’m inquiring in the sense therefore that I want to figure out the
> boundaries of how Virtuoso JDBC can enable me to pass these
> guidelines, even though I think I can get an exemption by labeling the
> SQL injection complaint a false positive.
>
>  
>
> What I’m talking about is doing this through a JDBC interface, and
> rather than using a query of the form:
>
>  
>
>         String queryFormat= "SPARQL"
>
>             + " define input:inference
> \"http://id.nlm.nih.gov/mesh/vocab\"";
>
>             + " PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>"
>
>             + " PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>"
>
>             + " PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>"
>
>             + " PREFIX owl: <http://www.w3.org/2002/07/owl#>"
>
>             + " PREFIX meshv: <http://id.nlm.nih.gov/mesh/vocab#>"
>
>             + " PREFIX mesh: <http://id.nlm.nih.gov/mesh/>"
>
>             + " SELECT ?l"
>
>             + " FROM <http://id.nlm.nih.gov/mesh>"
>
>             + " WHERE { mesh:%s %s ?l }";
>
>         String query= String./format/(queryFormat, id, prop);
>
>         log.info(query);
>
>         Statement stmt= connection.createStatement();
>
>         ResultSet rset= stmt.executeQuery(query);
>
>  
>
> I would rather do this using a prepared statement, maybe still
> formatting in the property so that the query plan can benefit from the
> predicate index:
>
>  
>
>         String queryFormat= "SPARQL"
>
>             + " define input:inference
> \"http://id.nlm.nih.gov/mesh/vocab\"";
>
>             + " PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>"
>
>             + " PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>"
>
>             + " PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>"
>
>             + " PREFIX owl: <http://www.w3.org/2002/07/owl#>"
>
>             + " PREFIX meshv: <http://id.nlm.nih.gov/mesh/vocab#>"
>
>             + " PREFIX mesh: <http://id.nlm.nih.gov/mesh/>"
>
>             + " SELECT ?l"
>
>             + " FROM <http://id.nlm.nih.gov/mesh>"
>
>             + " WHERE { ?? %s ?l }";
>
>         String query= String./format/(queryFormat, prop);
>
>         log.info(query);
>
>         PreparedStatement stmt= connection.prepareStatement(query);
>
>         stmt.setString(1, "http://id.nlm.nih.gov/mesh/"+id);
>
>        
>
> So far, this general approach of using a prepared statement is not
> working for me.   I may struggle through it, but is there anyway for
> me to preserve the convenience of prefixes:
>
>  
>
> … WHERE { mesh:?? %s ?l };
>
>  
>
> And then later bind the query argument?
>

Understood. Problem is that we need to publish more examples re., use of
SPARQL via ODBC and JDBC connections.

To our issue:

It will be something like:

     String queryFormat = "SPARQL"
         + " define input:inference \"http://id.nlm.nih.gov/mesh/vocab\"";
         + " PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>"
         + " PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>"
         + " PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>"
         + " PREFIX owl: <http://www.w3.org/2002/07/owl#>"
         + " PREFIX meshv: <http://id.nlm.nih.gov/mesh/vocab#>"
         + " PREFIX mesh: <http://id.nlm.nih.gov/mesh/>"
         + " SELECT ?l"
         + " FROM <http://id.nlm.nih.gov/mesh>"
         + " *WHERE { `iri(??)` `iri(??)` ?l }*";

//     String query = String.format(queryFormat, id, prop);
//     log.info(query);

     PreparedStatement ps = connection.prepareStatement(query);
     ps.setString(1, "http://id.nlm.nih.gov/mesh/"+id);
     ps.setString(2, prop);
     ResultSet rset = ps.executeQuery();

Note: You have to quote URIs without < >
Example:
       String prop = "http://testhost.org/myprop";;

We'll get some docs out too, as I stated earlier.

-- 
Regards,

Kingsley Idehen       
Founder & CEO 
OpenLink Software   (Home Page: http://www.openlinksw.com)

Weblogs (Blogs):
Legacy Blog: http://www.openlinksw.com/blog/~kidehen/
Blogspot Blog: http://kidehen.blogspot.com
Medium Blog: https://medium.com/@kidehen

Profile Pages:
Pinterest: https://www.pinterest.com/kidehen/
Quora: https://www.quora.com/profile/Kingsley-Uyi-Idehen
Twitter: https://twitter.com/kidehen
Google+: https://plus.google.com/+KingsleyIdehen/about
LinkedIn: http://www.linkedin.com/in/kidehen

Web Identities (WebID):
Personal: http://kingsley.idehen.net/dataspace/person/kidehen#this
        : 
http://id.myopenlink.net/DAV/home/KingsleyUyiIdehen/Public/kingsley.ttl#this

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most 
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Virtuoso-users mailing list
Virtuoso-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/virtuoso-users

Reply via email to