Rdf 如何在耶拿使用cidoc crm

Rdf 如何在耶拿使用cidoc crm,rdf,semantic-web,jena,ontology,Rdf,Semantic Web,Jena,Ontology,最近,我尝试使用Jena来创建RDF并进行查询,以接近语义web。现在,我已经在Jena中成功地创建了一个基于owl的RDF文件。然而,当我尝试使用不同的本体(例如:cidoc crm)时,我不知道如何将这些本体导入Jena。有人知道如何将它们导入耶拿吗?我需要创建一个新的本体模型吗 Jena的接口提供了一种使用本体(包括RDFS本体)的便捷方式。下面的代码显示了如何获取包含本体数据的OntModel。在这段代码中,我随后创建了另一个具有推理支持的OntModel,其中包括我创建的CIDOC模型

最近,我尝试使用Jena来创建RDF并进行查询,以接近语义web。现在,我已经在Jena中成功地创建了一个基于owl的RDF文件。然而,当我尝试使用不同的本体(例如:cidoc crm)时,我不知道如何将这些本体导入Jena。有人知道如何将它们导入耶拿吗?我需要创建一个新的本体模型吗

Jena的接口提供了一种使用本体(包括RDFS本体)的便捷方式。下面的代码显示了如何获取包含本体数据的OntModel。在这段代码中,我随后创建了另一个具有推理支持的OntModel,其中包括我创建的CIDOC模型。使用推断模型,很容易创建个体并查看其计算类型,或者查看由推断模型派生的子类关系

import com.hp.hpl.jena.ontology.Individual;
导入com.hp.hpl.jena.ontology.OntClass;
导入com.hp.hpl.jena.ontology.OntModel;
导入com.hp.hpl.jena.ontology.OntModelSpec;
导入com.hp.hpl.jena.rdf.model.ModelFactory;
导入com.hp.hpl.jena.rdf.model.Resource;
导入com.hp.hpl.jena.util.iterator.ExtendedIterator;
公共类cidoce示例{
最终静态字符串CIDOCNS=”http://www.cidoc-crm.org/cidoc-crm/";
公共静态void main(字符串[]args){
//将CIDOC-CRM加载到模型中。我们不会向该模型添加任何推理功能,但是
//我们将使用它作为OntModels的子模型,Jena可以从web上提取文档,但是
//你也可以下载一份本地副本并阅读。这肯定会比
//每次都下载。
最终OntModel cidocModel=ModelFactory.createOntologyModel(OntModelSpec.RDFS_MEM);
cidocModel.read(“http://www.cidoc-crm.org/rdfs/cidoc_crm_v5.1-draft-2013May.rdfs" );
//创建导入cidocModel的OntModel,并为其提供推理支持。
最终的OntModel模型=ModelFactory.createOntologyModel(OntModelSpec.RDFS\u MEM\u RDFS\u INF);
模型。添加子模型(cidocModel);
//从OntModel检索类并显示其子类。
最终OntClass e5_事件=model.getOntClass(CIDOCNS+“e5_事件”);
System.out.println(“E5_事件的子类:”);
对于(最终扩展迭代器it=e5_event.listSubclass();it.hasNext();){
System.out.println(“\t*”+it.next());
}
//在导入cidocModel的OntModel中创建自己的实例数据
final Individual someJoining=model.createIndividual(“http://example.org/someJoining,cidocModel.getOntClass(CIDOCNS+“E85_连接”);
System.out.println(“类型”+somejoin);
for(final ExtendedIterator types=someJoining.listRDFTypes(false);types.hasNext();){
System.out.println(“\t*”+types.next());
}
}
}
必须使用
OntModel.getOntClass(CIDCOCNS+“…”)
获取类有点笨拙,而且很容易出错。Jena提供了一个优秀的工具,它接受本体并生成一类常量,这些常量表示本体中声明的类、属性和个体。例如,您可以使用
schemagen
创建一个
CIDOC
类,例如,为
E5_事件创建一个常量
OntClass
对象,以便

final OntClass e5_事件=model.getOntClass(CIDOCNS+“e5_事件”);
System.out.println(“E5_事件的子类:”);
对于(最终扩展迭代器it=e5_event.listSubclass();it.hasNext();){
System.out.println(“\t*”+it.next());
}
你可以

System.out.println(“E5_事件的子类:”);
for(final extendede迭代器it=CIDOC.E5_Event.inModel(model).listsublass();it.hasNext();){
System.out.println(“\t*”+it.next());
}

您能澄清cidoc crm本体的含义吗?我看到有一个RDFS编码可以从OWLDL本体中获得,但只有OWLDL本体的草稿。处理这两种情况的方式是不同的。如果您使用的是纯RDF,那么只需要使用RDFS词汇表中定义的词汇表。如果您正在使用OWL,那么您的本体需要导入另一个本体。感谢您的回复,现在我有点困惑,我想使用jena中的cidoc crm制作一个RDF文件来描述博物馆和美术馆中的收藏。cidoc CRM是像都柏林核心一样的“领域本体论”还是仅仅是词汇表?@Richard你的术语似乎有点混淆了。CIDOC-CRM是一个领域本体,是的,它是一个文化遗产领域的本体。都柏林核心不是一个领域本体:相反,它是一个跨领域词汇(跨领域的意思是它适用于许多不同类型的领域,不仅仅是“文化遗产”或“医学”,或…)。此外,词汇和本体之间的区别不是绝对的,而是一个滑动比例:任何本体都是一个词汇,但只有充分表达和结构化的词汇通常被称为本体论。都柏林核心(Dublin Core)不是很结构化(其基础只是一个有用属性的列表,但没有任何类别的类结构/层次结构),通常不被认为是一个合适的本体论——尽管它至少在一定程度上也是个人喜好。谢谢你,这对我帮助很大!