我很努力地创建一个正确的SPARQL查询,它将生成正确的格式,以便我可以在其中打开Protege。我们的本体论是关于鸡尾酒的,我们希望在我们的数据库中包含所有DBPedia鸡尾酒,包括配料(dbp:ingredients
)和配方(dbp:prep
)。在数据库中获得鸡尾酒的效果很好,但其成分和配方不是。现在我有以下查询:??作为SPARQL构造中的主题字面值查询
CONSTRUCT {?drink dct:subject ?category.
?drink dbp:prep ?recipe.
?drink dbp:ingredients ?ingredients.
?drink rdf:type owl:NamedIndividual .
?category rdf:type owl:Class.
dct:subject rdf:type owl:ObjectProperty.
dbp:prep rdf:type owl:ObjectProperty.
dbp:ingredient rdf:type owl:Objectproperty.
}
WHERE {
?drink dct:subject ?category.
?drink dbp:prep ?recipe.
?drink dbp:ingredients ?ingredients.}
由于原料和配方,现在没有宣布,它不会在门徒的个人标签显示。但是,当我加入这个到查询的构造物部分:
?recipe rdf:type owl:NamedIndividual.
?ingredients rdf:type owl:NamedIndividual.
我得到一个错误:
Virtuoso RDF01 Error Bad variable value in CONSTRUCT: "*5 cL vodka *10 cL orange juice" (tag 246 box flags 0) is not a valid subject, only object of a triple can be a literal
我想是因为准备和DBpedia的成分只是一个字符串,没有任何链接的数据。 但是,如何使这项工作在Protege中显示?
总之,文字不能科目。您应该声明数据属性 - 而不是对象属性 - 并使相应的文字成为它们的值。为了提取对象,似乎很难解析这些文字。也许你可以查询维基数据获取更多关于鸡尾酒的结构化信息(如果你想保留文本描述,可以使用DBpedia的联合查询)。顺便说一句:https://stackoverflow.com/a/44227937/7879193 –
因此,不可能将Literal声明为owl:NamedIndividual?或者,也许有任何方法来转换查询中的文字,以便这是可能的? –
IRI被用作'owl:NamedIndividual'的唯一标识符。 – AKSW