Salut,
je veux ajouter une fonction extension filter dans le grammaire sparql ,

code de fonction:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
FunctionRegistry.get().put("http://jena.hpl.hp.com/ARQ/function#haschild",haschild.class);
j'ai écrire cette requête :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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:
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?