我在语义网上练习。我必须从DBpedia中提取一些人。必须将这些人插入我必须创建的本体中。我的问题是。我可以从DBedia中检索个人吗?
让我澄清一下!
当我发送这个sparql查询时
PREFIX dbo: <http://dbpedia.org/ontology>
SELECT distinct * WHERE
{
?album a dbo:Album .
} LIMIT 10
我得到10个URI。我应该得到整个实例吗?我的意思是,标签,对象属性,数据属性等,以便将它们插入我的本体?
我希望它们是一个完整的实例。我不想添加更多变量,例如
?album dbo:artist ?artist .
我可以使用java api,例如耶拿?
修改
让我举个例子。假设您获得了带有URI的相册
http://dbpedia.org/resource/...Baby_One_More_Time_(album)
此相册还有一些属性及其值,例如
dbo:artist dbr:Britney_Spears
dbo:releaseDate 1999-01-12 (xsd:date)
...
我怎样才能为我的本体创建一个单独的专辑,其中包括属性艺术家和releaseDate,并分别为Britney_Spears和1999-01-12设定价值?
答案 0 :(得分:2)
嗯,一个好的开始就是你的要求!你究竟需要什么?关于本体模块提取的科学过多研究(参见例如here)。
我的经验法则是:您提取的数量必须符合所需的稳健性和结果完整性的限制,这反过来又与您的要求保持一致。为清楚起见,请考虑以下事项:DBpedia Artist
是subClassOf
Person
。现在考虑从DBPedia中提取Artist
的所有实例,不包含 Artist
是subClassOf
Person
的信息。现在,如果您查询要求Person
的数据集,您将获得无。这是一个合理的结果吗?是的,但它完成了吗?没有!但是,如果您不关心每个Artist
是Person
的事实,那么它没关系。值得一提的是,它取决于DBpedia端点本身以及它所执行的推理类型。
结论:指定您真正需要的内容。虽然你可以满足几个类的实例,但你也可以提取整个DBpedia。
关于获取数据,有多种方式;再次取决于您的要求。出于简单的目的,您可以使用 Jena TDB 进行三重存储,并通过Jena访问它们。您甚至可以将数据存储在RDF文件中。例如,您可以在DBpedia端点上使用构造查询,并将结果格式指定为RDF,然后将它们插入到RDF引擎中。另一个选项,例如,此answer,说明如何使用INSERT查询将插入任务执行到本地图形中。
答案 1 :(得分:1)
你应该使用耶拿吗?你可以,但你不必!如果您向端点提出CONSTRUCT查询,则可以获取数据,但据我所知,您不想添加变量。因此,您可以通过询问有关实例的所有元数据来提出如下查询。
CONSTRUCT {?album?p?o} WHERE { ?专辑dbo:专辑。 ?专辑?p?o }
如果您希望获得有限数量的实例,则可以在此查询结束时再次添加限制。