fonction extension sparql
Salut,
je veux ajouter une fonction extension filter dans le grammaire sparql ,
code de fonction:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| package project;
import com.hp.hpl.jena.datatypes.xsd.XSDDatatype;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.StmtIterator;
import com.hp.hpl.jena.sparql.expr.NodeValue;
import com.hp.hpl.jena.sparql.expr.nodevalue.XSDFuncOp;
import com.hp.hpl.jena.sparql.function.FunctionBase0;
import com.hp.hpl.jena.sparql.function.FunctionBase2;
import com.hp.hpl.jena.sparql.function.FunctionFactory;
import com.hp.hpl.jena.vocabulary.RDFS;
import com.hp.hpl.jena.rdf.model.*;
import com.hp.hpl.jena.util.FileManager;
import com.hp.hpl.jena.vocabulary.*;
import java.io.*;
import java.util.HashMap;
public abstract class haschild extends FunctionBase2 implements FunctionFactory{
public NodeValue exec(NodeValue per,String ch) throws FileNotFoundException{
Model model = ModelFactory.createDefaultModel();
InputStream is = new BufferedInputStream(
new FileInputStream(
"c:/Users/toshibasat/Downloads/SNjournal.webscience.org-vivo.rdf"));
model.read(new InputStreamReader(is), "");
StmtIterator it=model.listStatements();
while (it.hasNext()){
Statement p=it.next();
Property prop = p.getPredicate( );
Resource res2 = p.getSubject( );
// Get object
RDFNode node =p.getObject( );
if((per==res2)||(node.toString()==ch)||(prop.toString()=="HasChild"))
return NodeValue.makeNode("true", XSDDatatype.XSDboolean);
}
return NodeValue.makeNode("false", XSDDatatype.XSDboolean);}
} |
code de l'enregistrement de la fonction:
Code:
FunctionRegistry.get().put("http://jena.hpl.hp.com/ARQ/function#haschild",haschild.class);
j'ai écrire cette requête :
Code:
1 2 3
| PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX f: <java:app.myFunctions.>
SELECT * WHERE {?Person foaf:name ?x. FILTER f:haschild(?Person, "Librarian").} |
mais il ne fonctionne pas il affiche ce message d'erreur:
Citation:
WARN [AWT-EventQueue-0] (Log.java:63) - Class not found: app.myFunctions.haschild
WARN [AWT-EventQueue-0] (E_Function.java:77) - URI <java:app.myFunctions.haschild> has no registered function factory
Question: Quelle est le problème?