我创建了一个扩展为sparql的函数!我如何将rdf文件的主题、对象和propririsamtest与函数的参数(主题、属性、对象)进行比较?
这是我的函数,但它不显示任何结果!
import static com.sun.org.apache.xalan.internal.xsltc.compiler.util.Type.String;
import java.*;
import java.io.*;**strong text**
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.jena.datatypes.xsd.XSDDatatype;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.ModelFactory;
import org.apache.jena.rdf.model.Property;
import org.apache.jena.rdf.model.RDFNode;
import org.apache.jena.rdf.model.Resource;
import org.apache.jena.rdf.model.Statement;
import org.apache.jena.rdf.model.StmtIterator;
import org.apache.jena.sparql.expr.NodeValue;
import org.apache.jena.sparql.function.Function;
import org.apache.jena.sparql.function.FunctionBase2;
import org.apache.jena.sparql.function.FunctionFactory;
import static org.apache.jena.vocabulary.RDF.Nodes.object;
import static org.apache.jena.vocabulary.RDF.Nodes.predicate;
import static org.apache.jena.vocabulary.RDF.Nodes.subject;
public class haschild extends FunctionBase2 implements FunctionFactory{
private Map _cache;
public haschild()
{
_cache = new HashMap();
}
@Override
public NodeValue exec(NodeValue v1, NodeValue v2) {
String value = v2.asString();
String value2 = v1.asString();
Model model = ModelFactory.createDefaultModel();
InputStream is = null;
try {
is = new BufferedInputStream(
new FileInputStream( "C:\\fichier rdf/journal.webscience.org-vivo.rdf"));
} catch (FileNotFoundException ex) {
Logger.getLogger(haschild.class.getName()).log(Level.SEVERE, null, ex);
}
model.read(new InputStreamReader(is), "");
StmtIterator iter = model.listStatements();
// affiche l'objet, le prédicat et le sujet de chaque déclaration
while (iter.hasNext()) {
Statement stmt = iter.nextStatement(); // obtenir la prochaine déclaration
Resource subject = stmt.getSubject(); // obtenir le sujet
Property predicate = stmt.getPredicate(); // obtenir le prédicat
RDFNode object = stmt.getObject(); // obtenir l'objet
if((value2.equals(subject.toString()))&&(object.toString().equals(value))&&(predicate.toString().equals("http://www.w3.org/2000/01/rdf-schema#HasChild")))
return NodeValue.TRUE;
return NodeValue.FALSE;}
return null;
}
@Override
public Function create(String uri) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.}
}
比较返回各个项目的节点和.equals。
参见NodeValue#asNode
和RDFNode.asNode
。
如果您想要值相等(例如1等于+1.0e0),将RDFNode.asNode
转换为NodeValue
并使用NodeValue.sameAs
。
NodeValue.asString
返回值的SPARQL语法版本。