RDF jena API比较主谓客体



我创建了一个扩展为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#asNodeRDFNode.asNode

如果您想要值相等(例如1等于+1.0e0),将RDFNode.asNode转换为NodeValue并使用NodeValue.sameAs

NodeValue.asString返回值的SPARQL语法版本。

相关内容

  • 没有找到相关文章

最新更新