올바른 형식을 생성하여 올바른 Protege를 열 수있는 올바른 SPARQL 쿼리를 만드는 데 어려움을 겪고 있습니다. 우리의 온톨로지는 칵테일에 관한 것입니다. 재료 (dbp:ingredients
)와 레서피 (dbp:prep
)를 포함하여 DBPedia의 모든 칵테일을 데이터베이스에 갖고 싶습니다. 데이타베이스에서 칵테일을 얻는 것은 효과적이지만 재료와 조리법은 잘 작동하지 않습니다. ? 내가 지금 다음과 같은 쿼리가 : 지금은 선언되지 않은SPARQL CONSTRUCT 쿼리의 리터럴
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.}
이후 재료와 조리법을, 그것은 Protege는의 개인 탭에 표시되지 않습니다. 내가 쿼리의 구조물 부분이 추가 때 :
?recipe rdf:type owl:NamedIndividual.
?ingredients rdf:type owl:NamedIndividual.
를 오류가 발생합니다 다음 준비 및 dbpedia에 재료 그냥 문자열, 아니 링크 된 데이터 때문에
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
나는 생각한다. 그러나 Protege에 표시되도록하려면 어떻게해야합니까?
있을 것입니다, 리터럴 대상이 될 수 없습니다. 객체 속성이 아닌 데이터 속성을 선언하고 각각의 리터럴을 값으로 설정해야합니다. 객체를 추출하기 위해 이러한 리터럴을 구문 분석하는 것이 어려워 보입니다. 아마도 Wikidata에 쿼리하여 칵테일에 대한보다 구조화 된 정보를 얻을 수 있습니다 (텍스트 설명을 유지하려면 DBpedia에 연합 쿼리 사용). BTW : https://stackoverflow.com/a/44227937/7879193 –
따라서 Literal을 올빼미로 선언하는 것은 불가능합니다. NamedIndividual? 또는 쿼리에서 리터럴을 변환 할 수있는 방법이 있습니까? –
IRI는 'owl : NamedIndividual'의 고유 식별자로 사용됩니다. – AKSW