[英]Jena & RDFS: Get property from external ontology
我有一个User
类的RDFS本体,例如:
<rdfs:Class rdf:ID="User">
<rdfs:subClassOf rdf:resource="http://xmlns.com/foaf/0.1/Agent" />
<rdfs:comment>
The class of users, subclassing the foaf:Agent class.
</rdfs:comment>
</rdfs:Class>
foaf:Agent
类具有一个名为name
的属性,我想使用Jena将该属性加载为类似以下内容:
Property name = model.getOntProperty(ns + "name");
问题是,当我尝试像这样使用它时,我得到了NullPointerException:
model.createStatement(resource, name, "Nicolas Cage");
我也尝试过使用foaf标准命名空间( ns = "http://xmlns.com/foaf/0.1/";
),即使我不确定这样做有多大意义。
最后,我不知道什么是正确的方法。 我应该创建它吗? 耶拿(Jena)不会以某种方式在外部本体中自动找到它吗?
在RDF中,资源(包括属性)由URI 标识 。 无需加载这些URI。 有时,由URI标识的文档可能包含所需的语句,在这种情况下,您需要加载包含这些语句的文档,但这与仅引用该属性不同。 这是一个例子:
import org.apache.jena.riot.RDFDataMgr;
import org.apache.jena.riot.RDFFormat;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.Property;
import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.rdf.model.Statement;
public class UseFoafNameExample {
public static void main(String[] args) {
Model model = ModelFactory.createDefaultModel();
Property name = model.createProperty( "http://xmlns.com/foaf/0.1/name" );
Resource resource = model.createResource( "http://stackoverflow.com/q/23818390/1281433/NicholasCage" );
Statement s = model.createStatement( resource, name, "Nicholas Cage" );
model.add( s );
RDFDataMgr.write( System.out, model, RDFFormat.RDFXML_ABBREV );
}
}
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:j.0="http://xmlns.com/foaf/0.1/">
<rdf:Description rdf:about="http://stackoverflow.com/q/23818390/1281433/NicholasCage">
<j.0:name>Nicholas Cage</j.0:name>
</rdf:Description>
</rdf:RDF>
现在,您的问题中还有另一个问题。
foaf:Agent类具有一个名为name的属性,我想使用Jena将该属性加载为类似以下内容:
foaf:Agent类没有属性; RDFS(和OWL)类不是这样工作的。 有一个将Agent
作为rdfs:domain
的属性name
(我没有检查是否确实如此,但这听起来很合理,我猜这就是造成混淆的地方)。 这意味着当你有一个三重
x foaf:name "some name"
你可以推断出
x rdf:type foaf:Agent
当然,要进行这种推断,您需要了解三元组
foaf:name rdfs:domain foaf:Agent
这就是您可能希望从其他地方加载本体的原因。 即,您想获取其中包含的公理 ,以便您可以对它们进行推理。
耶拿不会因为提及而自动加载某些东西。
rdf:resource="http://xmlns.com/foaf/0.1/Agent"
只是提到了Agent这个名字,而对于获取它一事无成。 它只是RDF的所有旧URI-可能不存在。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.