2012-09-11 34 views
7

Truy vấn SPARQL sau không nhận được kết quả mà tôi muốn vì chúng bằng các ngôn ngữ khác ngoài tiếng Anh, bất kể số filter lang 'en' (xem bộ lọc trong truy vấn).Bộ lọc SPARQL lang 'en' cung cấp các ngôn ngữ khác

Kết quả truy vấn:

"Никола́й Ива́нович Буха́рин"@en "Никола́й Буха́рин"@en "Nikolai Bukharin"@en 
"Gamal Abdel Nasser Hussein"@en  "جمال عبد الناصر"@en "Gamal Abdel Nasser"@en 

tôi nhìn vào trang dbpedia và tôi thấy rằng có phiên bản tiếng Anh trong những cái tên, nhưng tôi không hiểu tại sao các bộ lọc không hoạt động !! !

Ai đó có thể giúp tôi với điều đó không?

PREFIX dbo: <http://dbpedia.org/ontology/> 
PREFIX dbpedia: <http://dbpedia.org/property/> 
SELECT DISTINCT ?person ?birthname ?nameExact ?label 
where { 

    ?person rdf:type dbpedia-owl:Person . 
    ?person rdfs:label ?label . 
    OPTIONAL { ?person dbpedia-owl:birthName ?birthname . } 
    OPTIONAL { ?person dbpprop:name ?nameExact . } 

    FILTER (lang(?birthname) = 'en') 
    FILTER (lang(?label) = 'en') 
    FILTER (lang(?nameExact) = 'en') 

} 
LIMIT 300 

Trả lời

6

Thẻ ngôn ngữ là chú thích trong cơ sở dữ liệu. Bộ lọc của bạn hoạt động chính xác. Một số giá trị trong cơ sở dữ liệu được chú thích với en mặc dù chúng nằm trong các tập lệnh khác nhau. Bạn sẽ cần viết logic của riêng bạn để chọn thuộc tính thích hợp nhất. Tôi có thể chỉ sử dụng thuộc tính rdfs:label và cắt bất kỳ thứ gì trong ngoặc đơn (như trong "Black Hawk (Sauk leader)"@en). Điều đó dường như cung cấp kết quả tốt.

Cũng lưu ý rằng bạn cần phải đặt các FILTER s cho ?birthname?nameExactvào các OPTIONAL khối tương ứng, nếu không họ sẽ kết thúc loại bỏ bất kỳ trận đấu mà không có tài sản không bắt buộc.

+0

Cảm ơn rất nhiều! – Funmatica

+0

@Funmatica Nếu câu trả lời này phù hợp với bạn, bạn nên [chấp nhận nó] (http://meta.stackexchange.com/q/5234/225437). –

3

Hãy cẩn thận để tiền tố bạn phải sử dụng cùng trong việc kê khai và truy vấn (dbo ->dbo, không dbo ->dbpedia-owl)

PREFIX dbo: <http://dbpedia.org/ontology/> 
PREFIX dbp: <http://dbpedia.org/property/> 

SELECT DISTINCT ?person ?birthname ?nameExact ?label 
where { 

    ?person rdf:type dbo:Person . 
    ?person rdfs:label ?label . 
    OPTIONAL { ?person dbo:birthName ?birthname . } 
    OPTIONAL { ?person dbp:name ?nameExact . } 

    FILTER (lang(?birthname) = 'en') 
    FILTER (lang(?label) = 'en') 
    FILTER (lang(?nameExact) = 'en') 

} 

LIMIT 300 
Các vấn đề liên quan