Неразрешенное префиксное имя: rdfs: subClassOf в запросе SPARQL - PullRequest
3 голосов
/ 20 марта 2012
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.lang.*;
import java.util.regex.*;
import java.io.*;
import com.hp.hpl.jena.sparql.*;
import com.hp.hpl.jena.*;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.query.*;
import com.hp.hpl.jena.query.QueryExecution;
import com.hp.hpl.jena.query.QueryExecutionFactory;
import com.hp.hpl.jena.query.QueryFactory;
import com.hp.hpl.jena.query.ResultSet;
import com.hp.hpl.jena.query.ResultSetFormatter;

/*
<applet code="Sample" width=275 height=200>
</applet>
*/
//creating applet
public class Sample extends Applet implements ActionListener
{
 TextField t;
 String msg= " ";
 String token[];
int s=60;
 public void init()
 {
  setBackground(Color.gray);
  Label qa=new Label("QA SYSTEM",Label.CENTER);
  Button search=new Button("Search");
  t=new TextField(25);
  //Adding text box,button in to applet
  add(qa);
  add(t);
  add(search);
  t.addActionListener(this);
  search.addActionListener(this);
 }
 public void actionPerformed(ActionEvent ae)
 {
  String str=ae.getActionCommand();
  if(str.equals("Search"))
  {
   msg=t.getText() ;
   Pattern pat=Pattern.compile("[ ?]");
   String strs[]=pat.split(msg);
   for(int i=0;i<strs.length;i++)
   System.out.println("Token"+(i+1)+":"+strs[i]); 
  }

  try
  {
        //opening owl file
        InputStream in = new FileInputStream(new File("D:/ds.OWL"));
        Model model=ModelFactory.createMemModelMaker().createDefaultModel() ;
        model.read(in,null);       
        in.close();
        String queryString ="SELECT ?ds ?o WHERE {?ds  rdfs:subClassOf ?o }";

        com.hp.hpl.jena.query.Query q = QueryFactory.create(queryString);
        QueryExecution qe = QueryExecutionFactory.create(q, model);
        ResultSet results = qe.execSelect();
        while (results.hasNext())
        {
            System.out.println(results.getRowNumber() );
        }
        ResultSetFormatter.out(System.out, results, q);
        qe.close();

  }catch(Exception e){ System.out.println(e);}

   repaint();
 }
 public void paint(Graphics g)
 {
   g.drawString("wait...",6,80); 
 }
}

Ошибка:

com.hp.hpl.jena.query.QueryParseException: строка 1, столбец 27: неразрешенное префиксное имя: rdfs: subClassOf

Ответы [ 2 ]

11 голосов
/ 20 марта 2012
String queryString ="SELECT ?ds ?o WHERE {?ds  rdfs:subClassOf ?o }";

Должно быть

String queryString ="PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?ds ?o WHERE {?ds  rdfs:subClassOf ?o }";  
5 голосов
/ 20 марта 2012

Как следует из краткого ответа Уильяма, проблема в том, что вы не определили, что представляет собой префикс rdfs.Имена с префиксами в SPARQL и других соответствующих стандартах RDF являются чисто синтаксическим удобством для написания запросов и данных в более компактном и удобочитаемом виде.Вы можете назначить префикс для представления любого URI пространства имен, который вам нужен, поэтому вы всегда должны явно определять свои префиксы, используя механизм используемого вами формата.

В случае SPARQL это ключевое слово PREFIX, котороеиспользуется для определения префиксов.Эти определения должны находиться перед основной частью вашего запроса, и вы можете иметь столько определений, сколько хотите представить.

...