2013-06-06 3 views
1

그래프를 참조 데이터 및 그래프와 사용자 바인딩 리소스와 혼합 한 메모리 저장소가 있습니다. 모든 참조 데이터와 함께 사용자 및/또는 역할에 의해 필터링 된 데이터를 노출하고 싶습니다.뷰 및 참조 그래프에 대한 사용자 지향적 인 sparql

또한, 데이터 세트에 RDFS 추론이 필요합니다.

먼저 sparqlview 개체에 추론자를 추가 할 수 있습니까? 아니면보기를 새로 고칠 때마다 추론자를 실행해야합니까? 건축 부분으로

는, 내가 몇 가지 옵션이 보인다 :

  1. 빌드 사용자 별보기를 그 참조 데이터와 사용자 범위 (노동 조합하지만 난의 노동 조합과 함께 일할 수있는 쿼리를 만들 수 없습니다 다른 그래프 패턴)
  2. 참조 그래픽 및 사용자보기의 조합으로 기본 설정된 데이터 집합에 대해 내 탐색/수정 및 쿼리를 실행할 수있는 데이터 만 사용하여 사용자별로보기를 작성하십시오.
  3. ...

쿼리 성능, 메모리 사용량과 단순성의 안부 dotNetRdf이 할 수있는 최선의 패턴이 무엇입니까?

답변

0

API와 함께 이런 일을 해본 적이 없지만 가능해야합니다. 각 사용자가 볼 수있는 데이터에 대한 기준이 SPARQL 쿼리로만 표현 될 수 없다면 SparqlView 구현을 사용하지 않는 것이 좋습니다. SparqlView은 원본 데이터의 복사본을 취하고 현재는 기본 데이터를 직접 볼 수 있습니다 (이론적으로는 가능하지만 훨씬 더 많은 코딩이 필요하며 성능 향상을 위해 메모리 사용량을 절감 할 수 있습니다).

당신이 설명한대로 최선의 방법은 사용자 정의 ISparqlDataset 구현을 사용하는 것이고, 이는 장식 자 WrapperDataset에서 파생되었을 가능성이 높습니다. 이렇게하면 SPARQL 쿼리가 수행 할 모든 호출을 가로 채고 각 인스턴스가 검색 할 수있는 것을 정확하게 제한 할 수 있습니다. 이렇게하면 기본 데이터 인 단일 저장소와 해당 데이터에 대한 뷰를 제공하는 각 사용자의 래퍼를 가질 수 있습니다.

래핑 할 기본 데이터 집합이 IThreadSafeDataset을 구현하지 않으면 스레드 안전성에주의해야하는이 작업을 수행하는 경우 모든 래퍼가 Lock 속성을 무시하고 그렇지 않으면 문제가 생길 수 있습니다.

+0

Rob, 데이터 뷰로 필터를 사용하지 않고 내 뷰를 대체하려고 시도했지만 동일한 쿼리를 실행하는 데 두 배의 시간이 걸리는 것은 정상입니까? 기본 데이터 집합에는 UsesUnionDefaultGraph가 true로 설정되어 있습니다. 각 실행마다 기본 그래프를 계산할 때 차이가 생길 수 있습니까? 아니면 다른 것입니까? – Max

+0

안녕하세요 뒤로 Rob, 내 아키텍처를보기에서 사용자 지정 WrapperDataset으로 전환하도록 변경했습니다. 일부 조정 및 getTriplesXXX 메서드를 재정의하여 메모리 및 성능을 저하시키지 않으면 서 내 가시성 규칙을 구현할 수있었습니다. Neat;) 그러나 나는 http://www.dotnetrdf.org/tracker/Issues/IssueDetail.aspx?id=364에 제출 한 또 다른 문제가 있습니다. 어쨌든, 당신의 통찰력과 dotNetRdf 작업에 다시 한번 감사드립니다. – Max