문제

FOAF의 도움으로 사람들을 설명하는 파일이 있습니다.Jena에서는 프로필의 모든 연령을 구문 분석하려고 시도하고 있는데 listStatements와 listObjectsOfProperty가 다른 결과를 제공하는 것을 확인했습니다.javadocs나 다른 문서에서는 어떤 도움도 쉽게 찾을 수 없었습니다.

listStatments로 쿼리하기 위한 다음 코드가 있습니다.

StmtIterator iter = this.foafmodel.listStatements(
     (Resource) null, 
     this.foafmodel.createProperty("http://xmlns.com/foaf/0.1/age"), 
     (RDFNode) null);

다음은 listObjectsOfProperty에 대한 코드입니다.

Property foafAge = this.foafmodel.createProperty("http://xmlns.com/foaf/0.1/age");
NodeIterator iter = this.foafmodel.listObjectsOfProperty(foafAge);

이 경우 listStatements 반복자는 38번 반복하지만 listObjectsOfProperty는 20번만 반복합니다.누군가 이 두 구현의 차이점을 설명해 줄 수 있나요?

도움이 되었습니까?

해결책

귀하의 데이터에 귀하의 속성과 관련된 여러 개의 트리플이 포함되어 있다고 가정해 보겠습니다. :p 같은 객체를 참조하는 것 :o, 다음과 같습니다:

:s1 :p :o .
:s2 :p :o .

언뜻 보기에는 그렇게 보일 것 같습니다. listObjectsOfProperty 중복 없이 귀하의 자산에서 참조하는 모든 개인을 제공합니다.다음에 의존하는 구현을 자세히 살펴보면 이를 확인할 수 있습니다. GraphUtil#목록객체(...).코드는 Set<Node> 모든 개체를 집계합니다.결과적으로 요소를 사용하여 단일 반복만 반환해야 합니다. :o.

다른 방법은, listStatements 해당 속성이 사용될 때마다 명령문/트리플을 반환해야 합니다.위의 예제 모델에서는 다음을 포함하는 각 문에 대해 하나씩 두 개의 결과를 얻거나 얻어야 합니다. :p.

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