Jena와 listStatements와 listObjectsOfProperty의 차이점
-
21-12-2019 - |
문제
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
.