rdf jena api比较主语谓词对象

时间:2015-10-21 13:31:39

标签: api rdf sparql jena arq

我创建了一个扩展sparql的函数!如何比较rdf文件的主题,对象和proopriété与函数的参数(主语,属性,对象)?

这是我的功能,但它不会显示任何结果!

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.}



}

1 个答案:

答案 0 :(得分:0)

比较支持各种项目的节点和.equals那些。

请参阅NodeValue#asNodeRDFNode.asNode

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

NodeValue.asString返回值的SPARQL语法版本。不用于比较。