2009-07-10 4 views
1

시맨틱 웹 프로젝트에 RDF 파일이 있고이를 조작하기 위해 Rowlex를 사용합니다. 가 나는 RDF에서 개인을 제거하는 데 필요한, 그래서이 코드로 RDF에서 개인 및 속성 제거

<RDFDoc instance>.RemoveIndividual(new OwlThing(<individual URI>, <RDFDoc instance>)); 

을 사용했습니다, 나는 나의 개인이 갔다,하지만 속성은 여전히 ​​남아있다. 그래서 나는 그것을 먼저 제거해야한다는 것을 알아 냈습니다. 게다가 나는 모든 속성을 함께 제거하라는 명령을 찾지 못했습니다. 그래서, 질문 1 : 모든 속성을 가진 개인을 제거 할 수있는 방법이 있습니까? 또는 하나씩 코드가 아닌 한 줄의 코드에서 모든 속성을 제거 할 수 있습니까? 그리고 여러 값으로 속성을 제거하려면 어떻게해야합니까? 예를 들어 3 페이지의 StudyLists. 이 코드에 의해, 학생 개인으로부터 예를 들어, 'useSudyList을'속성을 제거하려고 할 때 다른 한편으로

는 :

<Ontologyowl:Student rdf:about="ehsanm"> 
//other properties 
    <Ontologyowl:useStudyList> 
     <Ontologyowl:StudyList rdf:about="stdl184516"/> 
    </Ontologyowl:useStudyList> 
</Ontologyowl:Student> 

:

student.RemoveuseStudyList(student.useStudyList); 

나는 나의 RDF 파일을 발견 ... 이렇게 된 것입니다 :

<Ontologyowl:Student rdf:about="ehsanm"> 
    //other properties 

</Ontologyowl:Student> 
<Ontologyowl:StudyList rdf:about="stdl184516"/> 

따라서이 속성은 버려졌습니다. 리터럴 속성에 대해서는이 문제가 없습니다. 질문 2 : 뭐가 문제입니까?

미리 알려 주셔서 감사합니다.

답변

2

귀하의 질문은 ROWLEX와 아무런 관련이 없지만 일반적인 그래프 문제입니다 : 노드를 삭제하면 삭제를 얼마나 멀리 계단식으로합니까? 리터럴을 사용하여 속성을 삭제하면 그래프가 연속되지 않으므로 대소 문자 구분이 쉽습니다. 다른 노드를 가리키는 속성을 삭제할 때 노드를 삭제해야합니까? 그래프에 순환 참조 또는 공유 관계가 없으므로 예제의 삭제가 분명해 보입니다.

다음 그래프를 상상해보십시오 : A (Adam), B (Bill) 및 F (Fred)의 3 인이 있다고 가정 해보십시오. A - F와 B - F의 아버지 관계가 있습니다. 아담과 그의 아버지 사이의 관계를 삭제합니다. 당신은 아버지 노드를 삭제하고 일관성없는 (고아) 상태로 Bill을 가져와야합니까? 대답은 "아니오"입니다. 관계 만 삭제합니다.

UML 다이어그램에서 "소유"와 "공유"를 구별하는 집계 관계의 옵션이 있습니다. 그것은 라인의 끝에있는 다이아몬드의 색상 (검정색 또는 흰색)으로 표현됩니다. 관계형 데이터베이스에서 외래 키에 대해 "계단식 삭제"를 정의하거나 무시할 수 있습니다. 그것들은 같은 개념을 나타냅니다. 불행하게도 RDF는 속성에 대해이 추가 메타 데이터를 제공하지 않습니다. RDF가이 정보를 이용할 수 있었다면, 우리는 그래프상에서 언제 삭제해야 하는지를 결정할 수있었습니다. 그러나 우리는 그렇지 않습니다. 이는 나쁜 소식에 대한 사례를 설정합니다. 자신 만의 것이므로, 적절하게 삭제를 구현할 수 있습니다.

+0

당신은 요점을 못 박았습니다! –

+0

이 매우 유용한 답장을 보내 주셔서 대단히 감사합니다. 그러나 이것은 또 다른 질문이되었습니다. 나는 이것을 "Semantic web의 개인과 속성"이라는 제목으로 게시했습니다. 당신이 저것을 살펴 본다면, 많이 감사 할 것입니다. 다시 한 번 감사드립니다. – Ehsan

3

속성을 제거했지만 제거하지 않은 <stdl184516>과 관련된 다른 진술이 있습니다.

<ehsanm> a Ontologyowl:Student . 
## Other statements 
<ehsanm> Ontologyowl:useStudyList <stdl184516> . 
<stdl184516> a Ontologyowl:StudyList . 

그래서 당신 <ehsanm> 주제에 대한 Ontologyowl:useStudyList 조건의 제거 (및이를 포함하는 문) 나머지를 떠날 것이라는 의미가 있습니다 : 여기

은 당신이 가지고있는 실제 문 (거북이 형식)입니다 <stdl184516>의 유형에 관한 단언.

리터럴에서이 문제가 발생하지 않는 이유는 리터럴이 명령문의 주체로 사용되지 않기 때문입니다.이 리터럴은 명령문의 개체 일뿐입니다. 그래서 그 문장을 제거하면 리터럴 (그리고 그것에 대한 모든 참조)이 제거됩니다. 자원을 명령문의 오브젝트로 사용하면 해당 자원에 관한 추가 명령문이있을 수 있습니다 (예에서와 같이).

RDF는 리터럴이 서로 짝이 맞지 않는다고 간주합니다. 즉, 리터럴이 서로 다르다는 것을 의미합니다 (동일한 값을 갖고 있더라도). 이런 식으로 리터럴에 대한 술어를 제거하는 이유 (리팩토링을 그렇게 생각하고 싶다면 "링크")도 리터럴을 제거합니다.

업데이트 (Mr. Lame의 답변에 추가) : 개념적으로 RDF는 노드 (자원)의 그래프에서 가장자리 (관계/술어)에 관한 것입니다. 노드 삭제의 개념은 RDF와 반대입니다. 노드 (자원)가 자신의 의미를 가짐을 의미합니다. rdf:type을 지정하여 리소스를 입력하는 경우에도 노드/에지/노드 문입니다. 노드 URI는 불투명 한 것으로 간주되며 고유 한 식별자 이상의 의미를 갖지 않습니다. 이것이 RDF가 "베어"노드 (선언문 외부의 노드)를 허용하지 않는 이유입니다. 그들은 고유 한 의미가 없습니다.

이산이 제기 한 질문을 확장하려면 노드를 삭제하면 실제로 들어오는/나가는 술어가 모두 삭제됩니다.이것은 실제로 노드를 "삭제"하지 않으며 실제로 그것을 참조하는 모든 명령문/어설 션을 제거합니다 (명령문을 참조하지 않을 때 "숨김"으로 간주).

+0

안내해 주셔서 감사합니다. 다시 확인하고 작동하는지 확인하기 위해 코드를 추가하겠습니다. 다시 고마워 – Ehsan