我有一个抓取语义网络文档的程序,例如RDF和OWL。
它获取它找到的URI并将它们放入列表中以供进一步处理。但是它也会找到某些语句中的URL(我使用维基百科数据,所以这通常是http://dbpedia.org/ontology/wikiPageExternalLink属性。
我怎么知道哪个是语义网址URI,哪个只是一个网址,只需要小心翼翼。我正在使用Java进行开发,并且正在考虑是否需要超过一定的时间来读取程序应该继续运行的文件。但我不知道该怎么做。
我知道我的问题很模糊,请告诉我我应该给出哪些细节。我没有发布代码,因为我认为在这种情况下它不会有用。
答案 0 :(得分:1)
为什么不抓取抓取的信息并将[部分]放入三重存储中,并使用SPARQL进行查询?如果这只是一系列处理中的一步,那么您不需要使用巨型三重存储,只需使用Jena和TDB进行简单的平面/文件存储,甚至只需使用内存模型。
SPARQL的优点在于,您可以拥有列出图表所需的所有灵活性,然后查询该图表。
由于您将遇到的某些URI是主题,谓词或对象 - 您实际上需要了解哪些图形模式最有意义才能进行更多处理。你喜欢s,p,o三元组,其中p = wikiPageExternalLink?如果是这样,SPARQL查询,找到对象值并快乐处理结果集。
请注意,三重模式中的某些对象将是字符串文字(例如“http:// ...”),并且可能是那些您要处理更多的对象,而不是跟随dbpedia图中的主题链接,例如: S,P,S2。再次,使用isLiteral()来救援SPARQL。
如果它是一个主题,我认为这会使它成为一个“语义Web URI”,因为至少应该有一些关于它的RDF语句 - 而不是字符串文字,它只是一些URI的字符串图中没有其他重要性。相应的函数是isIRI,所以你可以将你在两个桶中找到的URL划分为文字和IRI。
参见官方规范中的示例: http://www.w3.org/TR/rdf-sparql-query/#func-isIRI
SPARQL,特别是Jena的ARQ,有一堆函数,过滤器和REGEX可以应用于使其尽可能灵活(例如,您可能希望将某些域/模式列入白名单/黑名单,或者进行一些字符串操作在继续之前)。
答案 1 :(得分:0)
首先,重要的是要确认URL是URI的子集。 (即。http://en.wikipedia.org/wiki/Tim_Berners-Lee是关于Tim Berners Lee的维基百科页面的URI)。所有URI和URL在语义Web中都扮演着重要角色
我认为你遇到的最大问题是决定哪些URI会产生RDF三元组。
第一种方法是尝试解析您遇到的所有URI中的三元组。即使页面似乎是HTML,它也可能存在RDFa。 (我想你可以只HTTP请求RDF MIME类型 - 但你可能会丢失大量的RDFa数据)
另一种方法是假设所有http://dbpedia.org/ontology/wikiPageExternalLink属性'对象都不会产生任何有趣的事实。
Anther方法是记录不发布RDF并忽略它们的域名/子域。