2017-10-15 6 views
0

나는 온톨로지를 만들었고 거기에 일부 데이터 속성을 업데이트하려고합니다. enter link description here에서 SPARQL 업데이트를 읽었으며 SPARQL 업데이트 (삽입/업데이트)를 사용하여 Pellet 추론을 기반으로하는 RDF 트리플을 업데이트 할 수 있음을 발견했습니다. 하지만 나는 그것이 데이터 속성에 유용하다는 것에 의심의 여지가있다.UPdate 데이터 속성 SPARQL DELETE 및 INSERT를 기반으로 한 값

예를 들어 데이터 대상 has-age가 "30"이고 has-age-category = "child"인 사람 클래스가 있습니다. 이 SPARQL 쿼리를 만들었지 만 결과가 없습니다.

? "사람 윈 삭제 : '아이'\ n 형 카테고리 나이가?" "? : '성인'카테고리 연령을 가지고 \ n INSERT 사람 윈" "WHERE {\ n" "사람을 \ n " "사람 : nn : has-age 나이. \ n " "? 사람 nn : has-category-age? 카테고리. \ n " "FILTER ((has-category -age = 'child') & & (? has-age = '30 ')) \ n " "} "; 감사

내 온톨로지는 많은 : 귀하의 질문의

<?xml version="1.0"?> 

<!-- 
/////////////////////////////////////////////////////////////////////////////////////// 
// 
// Object Properties 
// 
/////////////////////////////////////////////////////////////////////////////////////// 
--> 




<!-- http://www.semanticweb.org/hp/ontologies/2017/9/untitled-ontology-563#has-class --> 

<owl:ObjectProperty rdf:about="http://www.semanticweb.org/hp/ontologies/2017/9/untitled-ontology-563#has-class"> 
    <rdfs:domain rdf:resource="http://www.semanticweb.org/hp/ontologies/2017/9/untitled-ontology-563#Person"/> 
    <rdfs:range rdf:resource="http://www.semanticweb.org/hp/ontologies/2017/9/untitled-ontology-563#Classroom"/> 
</owl:ObjectProperty> 



<!-- http://www.semanticweb.org/hp/ontologies/2017/9/untitled-ontology-563#has-time --> 

<owl:ObjectProperty rdf:about="http://www.semanticweb.org/hp/ontologies/2017/9/untitled-ontology-563#has-time"> 
    <rdfs:domain rdf:resource="http://www.semanticweb.org/hp/ontologies/2017/9/untitled-ontology-563#Courses"/> 
    <rdfs:range rdf:resource="http://www.semanticweb.org/hp/ontologies/2017/9/untitled-ontology-563#Time"/> 
</owl:ObjectProperty> 



<!-- 
/////////////////////////////////////////////////////////////////////////////////////// 
// 
// Data properties 
// 
/////////////////////////////////////////////////////////////////////////////////////// 
--> 




<!-- http://www.semanticweb.org/hp/ontologies/2017/9/untitled-ontology-563#has-age --> 

<owl:DatatypeProperty rdf:about="http://www.semanticweb.org/hp/ontologies/2017/9/untitled-ontology-563#has-age"> 
    <rdfs:domain rdf:resource="http://www.semanticweb.org/hp/ontologies/2017/9/untitled-ontology-563#Person"/> 
    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#integer"/> 
</owl:DatatypeProperty> 



<!-- http://www.semanticweb.org/hp/ontologies/2017/9/untitled-ontology-563#has-category-age --> 

<owl:DatatypeProperty rdf:about="http://www.semanticweb.org/hp/ontologies/2017/9/untitled-ontology-563#has-category-age"> 
    <rdfs:domain rdf:resource="http://www.semanticweb.org/hp/ontologies/2017/9/untitled-ontology-563#Person"/> 
    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/> 
</owl:DatatypeProperty> 



<!-- 
/////////////////////////////////////////////////////////////////////////////////////// 
// 
// Classes 
// 
/////////////////////////////////////////////////////////////////////////////////////// 
--> 




<!-- http://www.semanticweb.org/hp/ontologies/2017/9/untitled-ontology-563#Classroom --> 

<owl:Class rdf:about="http://www.semanticweb.org/hp/ontologies/2017/9/untitled-ontology-563#Classroom"/> 



<!-- http://www.semanticweb.org/hp/ontologies/2017/9/untitled-ontology-563#Courses --> 

<owl:Class rdf:about="http://www.semanticweb.org/hp/ontologies/2017/9/untitled-ontology-563#Courses"/> 



<!-- http://www.semanticweb.org/hp/ontologies/2017/9/untitled-ontology-563#Person --> 

<owl:Class rdf:about="http://www.semanticweb.org/hp/ontologies/2017/9/untitled-ontology-563#Person"/> 



<!-- http://www.semanticweb.org/hp/ontologies/2017/9/untitled-ontology-563#Time --> 

<owl:Class rdf:about="http://www.semanticweb.org/hp/ontologies/2017/9/untitled-ontology-563#Time"/> 



<!-- 
/////////////////////////////////////////////////////////////////////////////////////// 
// 
// Individuals 
// 
/////////////////////////////////////////////////////////////////////////////////////// 
--> 




<!-- http://www.semanticweb.org/hp/ontologies/2017/9/untitled-ontology-563#Jihed --> 

<owl:NamedIndividual rdf:about="http://www.semanticweb.org/hp/ontologies/2017/9/untitled-ontology-563#Jihed"> 
    <rdf:type rdf:resource="http://www.semanticweb.org/hp/ontologies/2017/9/untitled-ontology-563#Person"/> 
    <has-age rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">30</has-age> 
    <has-category-age rdf:datatype="http://www.w3.org/2001/XMLSchema#string">child</has-category-age> 
</owl:NamedIndividual> 



<!-- http://www.semanticweb.org/hp/ontologies/2017/9/untitled-ontology-563#Joseph --> 

<owl:NamedIndividual rdf:about="http://www.semanticweb.org/hp/ontologies/2017/9/untitled-ontology-563#Joseph"> 
    <rdf:type rdf:resource="http://www.semanticweb.org/hp/ontologies/2017/9/untitled-ontology-563#Person"/> 
    <has-age rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">10</has-age> 
    <has-category-age rdf:datatype="http://www.w3.org/2001/XMLSchema#string">child</has-category-age> 
</owl:NamedIndividual> 



<!-- http://www.semanticweb.org/hp/ontologies/2017/9/untitled-ontology-563#Ralph --> 

<owl:NamedIndividual rdf:about="http://www.semanticweb.org/hp/ontologies/2017/9/untitled-ontology-563#Ralph"> 
    <rdf:type rdf:resource="http://www.semanticweb.org/hp/ontologies/2017/9/untitled-ontology-563#Person"/> 
    <has-age rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">25</has-age> 
    <has-category-age rdf:datatype="http://www.w3.org/2001/XMLSchema#string">adult</has-category-age> 
</owl:NamedIndividual> 

답변

2
  1. 포맷 항상 질문을 읽고 다른 데 도움이됩니다.
  2. 어떤 트리플 스토어/SPARQL 엔진을 사용합니까?
  3. 데이터를 보지 않고 WHERE 부분이 정확하고 일부 데이터와 일치하는지 어떻게 확인할 수 있습니까?
  4. SPARQL 업데이트 쿼리 디버깅은 WHERE 부분이 어떤 결과와도 일치하는지 먼저 확인함으로써 가능합니다. 이는 실제로 SELECT 쿼리를 사용하여 수행 할 수 있습니다.

    WHERE { 
    ?person rdf:type nn:person . 
    ?person nn:has-age ?ag . 
    ?person nn:has-category-age ?categry . 
    FILTER ((has-category-age='child') && (?has-age='30')) 
    } 
    
    1. 배 패턴 ?person nn:has-category-age ?categry . 및 필터는 (has-category-age='child')이다 : 당신의 SPARQL 쿼리에서

    나는 WHERE 부분에 명백한 오류를 볼 수 있습니다. 왜? 술어를 다시 사용하지 않고 변수 값을 기준으로 필터링해야합니다.

  5. 트리플 패턴 ?person nn:has-age ?ag .이고 필터는 (?has-age='30')입니다. 이전과 같은 문제는 ... 또한, 나이의 데이터 유형이 xsd:integer 인 경우 '30'을 사용할 수 없습니다. 따옴표 안에 문자열이 있기 때문입니다. 어느 쪽이든 사용 30 또는 "30"^^xsd:integer
  6. 다음에 변수 이름을 확인하십시오. 오타를보기가 끔찍합니다. ?ag ->?age?categry ->?category

고정 WHERE 부분 (내가 나이입니다 있으리라 믿고있어 정수 값) :

WHERE { 
    ?person rdf:type nn:person . 
    ?person nn:has-age ?age . 
    ?person nn:has-category-age ?category . 
    FILTER ((?category='child') && (?age=30)) 
}