문제

시맨틱 웹 프로젝트에 RDF 파일이 있으며 조작을 위해 Rowlex를 사용합니다. RDF에서 개인을 제거해야했기 때문에

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

이 코드를 사용하면 개인이 사라졌지만 여전히 속성이 남아있었습니다. 그래서 먼저 속성을 제거해야한다는 것을 알았습니다. 게다가 나는 모든 속성을 함께 제거하기위한 명령을 찾지 못했습니다. 그래서, 질문 1: 모든 속성을 가진 개인을 제거하는 방법이 있습니까? 아니면 한 줄의 코드로 모든 속성을 하나씩 제거 할 수 있습니까? 그리고 여러 값으로 속성을 제거하려면 어떻게해야합니까? 예를 들어 3 명의 스튜디오리스트, 예제 다운 페이지.

반면에, 제가이 코드를 통해 학생 개인으로부터 'useudylist'와 같은 속성을 제거하려고 할 때.

student.RemoveuseStudyList(student.useStudyList);

RDF 파일을 찾았습니다.

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

... 이렇게되었습니다.

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

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

따라서 재산이 버려졌습니다. 문자 그대로의 속성 에이 문제가 없습니다. 질문 2: 뭐가 문제 야?

주의를 기울여 주셔서 감사합니다.

도움이 되었습니까?

해결책

귀하의 질문은 Rowlex와 관련이 없지만 일반적인 그래프 문제입니다. 노드를 삭제하면 삭제를 얼마나 멀리 캐스케이드합니까? 문자 그대로의 속성을 삭제하면 그래프의 연속이 없으므로 케이스는 쉽습니다. 다른 노드를 가리키는 속성을 삭제하면 노드를 삭제해야합니까? 그래프에 원형 참조 나 공유 관계가 포함되어 있지 않기 때문에 예제의 삭제는 분명해 보입니다.

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

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

다른 팁

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

다음은 실제 진술 (Turtle Format)입니다.

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

따라서 제거하는 것이 합리적입니다 Ontologyowl:useStudyList 당신을위한 술어 <ehsanm> 주제 (및 그것을 포함하는 진술)는 나머지 주장을 남길 것입니다. <stdl184516>의 유형.

리터럴 에이 문제가없는 이유는 진술의 주제로서 리터럴이 없기 때문입니다 (진술의 대상 일뿐입니다). 따라서 그 진술을 제거하면 문자 그대로 (및 모든 참조)가 제거됩니다. 리소스를 진술의 대상으로 사용하면 해당 리소스에 관한 추가 진술이있을 수 있습니다 (예에서와 같이).

RDF는 리터럴 분리를 고려합니다. 즉, 모두 다른 값을 갖더라도 다릅니다. 그렇기 때문에 문자 그대로의 술어를 제거하는 이유 (그런 식으로 생각하고 싶다면 "링크")도 문자를 제거합니다.

업데이트 (Lame 씨의 응답에 추가) : 개념적으로, RDF는 노드 (리소스) 그래프에서 가장자리 (관계/곤경)에 관한 것입니다. 노드를 삭제한다는 개념은 RDF와 상반됩니다. 노드 (자원)가 자체적으로 의미가 있음을 의미합니다. 리소스를 주장함으로써 자원을 입력 할 수도 있습니다 rdf:type 노드/에지/노드 문입니다. 노드 URI만으로는 불투명 한 것으로 간주되며 고유 식별자가 아닌 의미론이 없습니다. 이것이 RDF가 "베어"노드 (명령문 외부의 노드)를 허용하지 않는 이유입니다.

Ehsan이 제기 한 질문을 확장하려면 노드를 삭제하면 실제로 들어오는/나가는 곤경이 실제로 삭제됩니다. 이것은 실제로 노드를 "삭제"하지 않으며 실제로 참조하는 모든 진술/어설 션을 제거합니다 (진술이 참조 할 때 "숨겨진"것으로 생각하십시오).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top