2013-09-03 23 views
6

İki SPARQL xsd: dateTime arasındaki farkı hesaplama işlevi nedir?SPARQL İki tarih arasındaki farkın hesaplanması

Veri dosyasına bir başvuru buldum, ancak bu çalışmıyor. SPARQL'te böyle bir yerleşik işlev, diğer çoğu sorgu diliyle olduğu gibi var mı?

+0

Bu soruyu daha önce anonim kullanıcı olarak sordunuz ve sonra silinsin? Yemin edebilirdim, bugün neredeyse aynı soruya cevap verdim. –

+0

@JoshuaTaylor Bir soru sordum, ama bunun bir parçasıydı ve tam olarak bu soru değildi. İki soru farklı ve ben onu silmedim. –

+1

Tamam, sadece merak ediyorum, çünkü xsd'nin çıkarılmasıyla ilgili bir soru vardı: tarihler, bir süre ürettikleri ve bunun yerine yılların sayısını nasıl alacakları. İşte bu yüzden SPARQL kodunun tamamı hazırdı. Belki de garip bir tesadüf. –

cevap

8

Bazı SPARQL motorları doğrudan tarih aritmetiğini destekleyebilir. Örneğin, this answers.semanticweb.com question and answer'da belirtildiği gibi, Jena tarih aritmetiğini destekler ve bir tarihi diğerinden çıkararak xsd: Süresini alabilirsiniz. Diğer uygulamalar dated işlevini destekleyebilir. Örneğin, this Virtuoso example bif: datediff kullanımını içerir. Bununla birlikte, bunlar belirli bir SPARQL uygulamasında mevcut olması garantilidir ve mevcut değildir.

Daha taşınabilir, ancak muhtemelen daha az verimli bir çözüm için yıl parçalarını bir tarih saatinden ayıklamak üzere year'u kullanabilirsiniz. Bu, sen mesela do

select ?age where { 
    bind("1799-12-14"^^<http://www.w3.org/2001/XMLSchema#date> as ?death) 
    bind("1732-02-22"^^<http://www.w3.org/2001/XMLSchema#date> as ?birth) 
    bind(year(?death)-year(?birth) as ?age) 
} 

ve almak sonuçları

------- 
| age | 
======= 
| 67 | 
------- 

Bu, iki tarih arasında ay ve günlere göre birer kapalı olma potansiyeline sahip sağlayan ama aynı can month ve day işlevlerini kullanarak bu konuda çalışın. This thread, bu tür uygulamalardan bazılarını açıklar.

+0

Bağlantı öldü, lütfen güncelleyin. –

+0

@ KimA.Jakobsen Bir dizi bağlantı var, ama ilkini kastettiğinizi varsayıyorum. Answers.semanticweb.com sitesi bazen biraz lapa lapa olduğunu. Bunun çok uzun zaman önce geri döneceğini umuyorum. Bu, internet arşivi/wayback makinesinin https://web.archive.org/web/20131026044936/http://answers.semanticweb.com/questions/24017/jena-arq-date-diff adresinde bir kopyasına sahip olduğunu söyledi. –

+0

Tamam, biraz hızlı olabilirdi, evdeyim, site yakında tekrar yedeklenecek. arşiv sayfası için teşekkürler :) –

6

SPARQL'te bir yaşın nasıl hesaplanacağını araştırırken bu mesajı buldum. Doğru ipucu veren Joshua Taylor'a teşekkürler. Bununla birlikte, bir düzeltme ekleyerek kod segmentini geliştirdim, böylece kişinin doğum yıllarında ölümünde doğum günü olmasaydı, bir yıl kadar sürmedi. Ben bu konu için arama yaparken, bu yazıyı bulmak için yararlı olabileceğini düşündüm, benim gibi:

select ?age where { 
    bind("1799-12-14"^^<http://www.w3.org/2001/XMLSchema#date> as ?death) 
    bind("1732-02-22"^^<http://www.w3.org/2001/XMLSchema#date> as ?birth) 
    bind(year(?death) - year(?birth) - if(month(?death)<month(?birth) || (month(?death)=month(?birth) && day(?death)<day(?birth)),1,0) as ?age) 
} 
+0

İnanılmaz kullanışlı! Güncelleme için teşekkürler. –

İlgili konular