使用 Jena 读取 RDF 数据失败
Reading RDF data using Jena failing
下面的代码是读取一个schema和一个数据文件来找到rdf.type的colin和Person。但是,我收到错误消息:
线程中出现异常 "main" org.apache.jena.riot.RiotException:[line: 1, col: 1 ] prolog 中不允许包含内容。代码如下:
public void reason(){
String NS = "urn:x-hp:eg/";
String fnameschema = "D://Work//EclipseWorkspace//Jena//data//rdfsDemoSchema.rdf";
String fnameinstance = "D://Work//EclipseWorkspace//Jena//data//rdfsDemoData.rdf";
Model schema = FileManager.get().loadModel(fnameschema);
Model data = FileManager.get().loadModel(fnameinstance);
InfModel infmodel = ModelFactory.createRDFSModel(schema, data);
Resource colin = infmodel.getResource(NS+"colin");
System.out.println("Colin has types");
for (StmtIterator i = infmodel.listStatements(colin, RDF.type, (RDFNode)null); i.hasNext(); ) {
Statement s = i.nextStatement();
System.out.println(s);
}
Resource Person = infmodel.getResource(NS+"Person");
System.out.println("\nPerson has types:");
for (StmtIterator i = infmodel.listStatements(Person, RDF.type, (RDFNode)null); i.hasNext(); ) {
Statement s = i.nextStatement();
System.out.println(s);
}
}
文件rdfsDemoData.rdf
@prefix eg: <urn:x-hp:eg/> .
<Teenager rdf:about="⪚colin">
<mum rdf:resource="⪚rosy" />
<age>13</age>
</Teenager>
文件rdfsDemoSchema.rdf
@prefix eg: <urn:x-hp:eg/> .
<rdf:Description rdf:about="⪚mum">
<rdfs:subPropertyOf rdf:resource="⪚parent"/>
</rdf:Description>
<rdf:Description rdf:about="⪚parent">
<rdfs:range rdf:resource="⪚Person"/>
<rdfs:domain rdf:resource="⪚Person"/>
</rdf:Description>
<rdf:Description rdf:about="⪚age">
<rdfs:range rdf:resource="&xsd;integer" />
</rdf:Description>
您的数据语法错误。您正在混合 Turtle 和 RDF/XML。 RDF/XML 没有 @prefix
- 它使用 XML 的名称空间。看起来您想要一个 XML 实体声明,例如:
<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [
<!ENTITY eg "urn:x-hp:eg/" >
]>
...
下面的代码是读取一个schema和一个数据文件来找到rdf.type的colin和Person。但是,我收到错误消息:
线程中出现异常 "main" org.apache.jena.riot.RiotException:[line: 1, col: 1 ] prolog 中不允许包含内容。代码如下:
public void reason(){
String NS = "urn:x-hp:eg/";
String fnameschema = "D://Work//EclipseWorkspace//Jena//data//rdfsDemoSchema.rdf";
String fnameinstance = "D://Work//EclipseWorkspace//Jena//data//rdfsDemoData.rdf";
Model schema = FileManager.get().loadModel(fnameschema);
Model data = FileManager.get().loadModel(fnameinstance);
InfModel infmodel = ModelFactory.createRDFSModel(schema, data);
Resource colin = infmodel.getResource(NS+"colin");
System.out.println("Colin has types");
for (StmtIterator i = infmodel.listStatements(colin, RDF.type, (RDFNode)null); i.hasNext(); ) {
Statement s = i.nextStatement();
System.out.println(s);
}
Resource Person = infmodel.getResource(NS+"Person");
System.out.println("\nPerson has types:");
for (StmtIterator i = infmodel.listStatements(Person, RDF.type, (RDFNode)null); i.hasNext(); ) {
Statement s = i.nextStatement();
System.out.println(s);
}
}
文件rdfsDemoData.rdf
@prefix eg: <urn:x-hp:eg/> .
<Teenager rdf:about="⪚colin">
<mum rdf:resource="⪚rosy" />
<age>13</age>
</Teenager>
文件rdfsDemoSchema.rdf
@prefix eg: <urn:x-hp:eg/> .
<rdf:Description rdf:about="⪚mum">
<rdfs:subPropertyOf rdf:resource="⪚parent"/>
</rdf:Description>
<rdf:Description rdf:about="⪚parent">
<rdfs:range rdf:resource="⪚Person"/>
<rdfs:domain rdf:resource="⪚Person"/>
</rdf:Description>
<rdf:Description rdf:about="⪚age">
<rdfs:range rdf:resource="&xsd;integer" />
</rdf:Description>
您的数据语法错误。您正在混合 Turtle 和 RDF/XML。 RDF/XML 没有 @prefix
- 它使用 XML 的名称空间。看起来您想要一个 XML 实体声明,例如:
<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [
<!ENTITY eg "urn:x-hp:eg/" >
]>
...