2011-11-20 6 views
4

는에서 확인할 수있다 그렇습니다 날짜에 산술 연산을 수행 할 수있는 것으로 보이지 않습니다. 즉, 계산기가 작품이 저자 사망 후 70 년 간 출판되었는지 여부. 불행히도, 표준 파이썬의 rdf 라이브러리 중 아직 아무 것도 sparql 1.1 에 대한 지원을 구현하지 못했습니다. 따라서이 제한을 극복하는 방법에 대한 제안이 있었는지 또는 sparql을 더 잘 지원하는 파이썬 라이브러리를 알고 있는지 궁금합니다. ?Python으로 Sparql에서 산술 연산을 수행하는 방법은 무엇입니까? <a href="https://github.com/okfn/pdcalc/blob/master/pd/map.rdf" rel="nofollow">https://github.com/okfn/pdcalc/blob/master/pd/map.rdf</a></p> <p>코드가 제대로 때문에 SPARQL 1.0 발생했습니다 문제의 작품의 공개 상태를 확인하실 수 없습니다 : 내가 코드를 공개 도메인 계산기를,을 writting하고

귀하의 혐의로 기대! 구현이 최소한 날짜 비교할 수 있어야 사양은 다음 경우 SPARQL 1.0 날짜에 산술 연산을 할 수는 없지만

답변

1

:

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
SELECT * 
WHERE 
{ 
    # Your Triple Patterns here 
    FILTER(?date > "2011-11-20T00:00:00Z"^^xsd:dateTime) 
} 

을 이제 여전히 문제를 피해 갈 수없는 당신을 저자의 사망 일을 받아서 70을 더할 필요가있다. 아마도 클라이언트 코드에서 해당 부분을 계산하여 SPARQL 쿼리에 주입해야 할 것입니다. 즉, 정보를 얻으려는 정보와 공개 작업 인 경우 계산할 정보라는 두 가지 쿼리를 수행해야 할 수 있습니다. Tbh 클라이언트 코드에서 두 번째 부분 만 계산하면 추가 쿼리를 저장할 수 있습니다.

좋은 SPARQL 1.1 호환 파이썬 라이브러리가있을 때까지 이상적이지는 않지만 그다지 이상하지 않습니다.

+0

필터에서 'literal'을 'xsd : dateTime'과 같이 유효하게 만드는 것이 더 좋습니다. ' "2011-11-20T00 : 00 : 00Z"'. dd/mm/yyyy가 아닌 yyyy-mm-dd 순서 및 구분 기호를 유의하십시오. 초는 선택 사항이 아닙니다. 또한 사전 식으로 정렬 된 이러한 날짜 시간은 연대순으로 정렬됩니다. – laalto

+0

@laalto 수정 완료 – RobV

3

심지어 SPARQL 1.1은 기본적으로 날짜에 대해 산술 연산을 지원하지 않습니다. SPARQL operator mapping 섹션을 참조하십시오 : 산술 연산은 숫자 데이터 유형에만 정의됩니다.

이 목적을 위해 확장 기능을 제공하는 SPARQL 1.1 구현이있을 수 있지만, 현재 내장되어있는 것은 분명하지 않습니다. 확실히 파이썬에서는 아닙니다.

가장 좋은 방법은 원하는 SPARQL 엔진 개발자에게 연락하여 그러한 확장 프로그램을 구현하거나 자신의 코스를 롤백하는 것입니다.

대부분의 SPARQL 엔진 (1.0도)은 날짜 비교 연산을 지원하므로 정렬 및 비교와 같은 작업을 수행 할 수 있지만 쿼리 결과에 대한 사용자 정의 후 처리 작업을 수행해야합니다.

업데이트 난 그냥이 아니라 중요한 것을 간과 실현 : 물론 SPARQL 1.1 정수로 날짜 시간 값의 연도와 달 - 구성 요소를 반환 등 year(), month(), 같은 지원 기능을 수행을하고있는 당신이 할 수 날짜에 로터리 계산을하는 데 사용됩니다.