My current solution builds on the existing jena infrastructure - but it does 
not modify it.

My uses cases for uniform sparql stmt parsing included parsing query strings 
against a given prefix mapping and also cleaning queries - so removing unused 
prefixes.

I have some test cases in [1] of what it looks like:

PrefixMapping pm = RDFDataMgr.loadModel("rdf-prefixes/wikidata.jsonld");
String queryStr = "INSERT {" +
        "  ?s wdt:P279 wd:Q7725634 .\n" +
        "}\n" +
        "  WHERE {\n" +
        "      ?s rdfs:label ?desc \n" +
        "      FILTER (LANG(?desc) = \"en\").\n" +
        "  }\n";


// A SparqlStmtParser currently inherits from Function<String, SparqlStmt>

SparqlStmtParser parser =  SparqlStmtParserImpl.create(pm);
SparqlStmt stmt = parser.apply(queryStr); // Probably 'parse' would a nicer 
name than the generic apply
SparqlStmtUtils.optimizePrefixes(stmt);
UpdateRequest updateRequest = stmt.getUpdateRequest();


I know its not very well documented, but I hope you can get the gist of the 
idea :)


Cheers,

Claus

[1] 
https://github.com/SmartDataAnalytics/jena-sparql-api/blob/def0d3bdf0f4396fbf1ef0715f9697e9bb255029/jena-sparql-api-stmt/src/test/java/org/aksw/jena_sparql_api/stmt/TestSparqlStmtUtils.java#L54




On 18.03.20 14:25, Marco Neumann wrote:
thank you Claus and Martynas, both very good ideas here. it's a function we
should move into Jena.

let's look at this in a bit more detail now, I currently envision this to
be a factory method of org.apache.jena.query.Query returning boolean like

.isSelect()
.isAsk()
.isDescribe()
.isUpdate()

Claus your solution would extend the following?

org.apache.jena.sparql.lang.ParserSPARQL11.perform(ParserSPARQL11.java:100)

how is fuseki implementing this during query parsing at the moment?




On Wed, Mar 18, 2020 at 1:00 PM Martynas Jusevičius <marty...@atomgraph.com>
wrote:

I always wondered why there is no class hierarchy for SPARQL commands,
similarly to SP vocabulary [1]. Something like

Command
   Query
     Describe
     Construct
     Select
     Ask
   Update
     ...

So that one could check command type doing instanceof Update or
instance of Select instead of query.isSelectType() etc.

[1] https://github.com/spinrdf/spinrdf/blob/master/etc/sp.ttl



On Wed, Mar 18, 2020 at 12:58 PM Marco Neumann <marco.neum...@gmail.com>
wrote:
is there some utility function here in the code base now already to do
this, or do I still need to roll my own here?

On Tue, Jul 30, 2013 at 4:25 PM Andy Seaborne <a...@apache.org> wrote:

On 30/07/13 10:13, Arthur Vaïsse-Lesteven wrote:
Hi,

I would like to know if Jena offers a way to detect the type of an
unknow SPARQL request ?Starting from the query string.
At the moment the only way I succed to code it without "basic
parsing"
of the query ( sort of thing I prefer avoid, manually parsing string
with
short function often create errors )
looks like this :

[...]
         String queryString = "a query string, may be a select or an
update";
          try{
              Query select = QueryFactory.create(queryString);
              Service.process_select_query(select);//do some work with
the select
          }
          catch(QueryException e){
              UpdateRequest update =
UpdateFactory.create(queryString);
              Service.process_update_query(update);//do some work with
the update
          }
          catch(ProcessException e){
              //handle this exception
          }

[...]

So is it possible ? Or not ?
Not currently.

You could use a regexp to spot the SELECT/CONSTRUCT/DESCRIBE/ASK
keyword
coming after BASE/PREFIXES/Comments.

         Andy


--


---
Marco Neumann
KONA

--
Dipl. Inf. Claus Stadler
Department of Computer Science, University of Leipzig
Research Group: http://aksw.org/
Workpage & WebID: http://aksw.org/ClausStadler
Phone: +49 341 97-32260

Reply via email to