我试图提取所有美国公司,所以我运行了以下查询
PREFIX cat: <http://dbpedia.org/resource/Category:>
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT DISTINCT ?page ?subcat WHERE { ?subcat skos:broader* cat:Companies_of_the_United_States_by_industry .
?page dcterms:subject ?subcat .
?page rdfs:label ?pageName.
}
这是结果的快照
Amgen和Pfizer既是公司也是类别,所以我最终收集了辉瑞和Amgen(人,产品)下的所有东西。我发现这些条目属于维基百科类别,名为Category:Wikipedia_categories_named_after_companies_of_the_United_States或Category:Wikipedia_categories_named_after_pharmaceutical_companies_of_the_United_States。所以我试着过滤这些类别,所以我做了这个
SELECT DISTINCT ?page ?subcat WHERE { ?subcat skos:broader* cat:Companies_of_the_United_States_by_industry .
?page dcterms:subject ?subcat .
?page rdfs:label ?pageName.
FILTER( !regex(?subcat,"Wikipedia_categories_named_after_pharmaceutical_companies_of_the_United_States")) }
但没有运气,他们仍在那里。知道如何避免这个问题吗?
答案 0 :(得分:3)
问题与具有相同名称的问题无关。维基百科类别不构成类型层次结构,因此将它们视为一个没有意义。您看到结果的原因是category Pfizer,其更广泛的值包括公司列表,但也是dcterms:dbpedia的主题:Alprazolam,dbpedia:Cetirizine等。作为类型层次结构没有意义,但它适用于组织文章主题。如果你只想要公司回来,只要问一下公司的事情:
SELECT DISTINCT ?page ?subcat WHERE {
?subcat skos:broader* category:Companies_of_the_United_States_by_industry .
?page dcterms:subject ?subcat .
?page rdfs:label ?pageName.
?page a dbpedia-owl:Company
}
但是,我们可以清理一下。你没有使用?标签,所以我们可以删除它。我们可以使用一些较短的语法来使事情变得更加清晰。我们还可以注意到“按行业划分的公司”有一个skos:更广泛的价值“美国公司”,这使得查询的意图更加清晰。
select distinct ?company ?subcategory where {
?company dcterms:subject ?subcategory ;
a dbpedia-owl:Company .
?subcategory skos:broader* category:Companies_of_the_United_States .
}
limit 1000
作为最后一点,类别层次结构并不一定意味着每个公司都有一条通往顶级类别的路径。也就是说,您可以多次列出一些公司,例如:
company subcategory
------------------------------------
companyX Textile_Companies
companyX Companies_in_New_Hampshire
除非您需要子类别列表,否则您可以考虑从查询中删除它,在这种情况下您可以简单地使用(使用属性路径):
select distinct ?company where {
?company a dbpedia-owl:Company ;
dcterms:subject/skos:broader* category:Companies_of_the_United_States .
}
limit 1000