2012-01-20 64 views
8

Về cơ bản tôi có truy vấn (được hiển thị bên dưới) hoạt động hiệu quả. Tuy nhiên, tôi muốn tìm kiếm của tôi chính xác hơn khi nhãn là chuỗi thực tế 'yago' thay vì chứa chuỗi 'yago'. Tôi muốn cố gắng để làm điều đó mà không có bộ lọc nếu có thể như tôi nghĩ rằng bằng cách sử dụng LỌC làm cho truy vấn DBpedia mất nhiều thời gian.DBpedia SPARQL Truy vấn cho một rdf cụ thể: nhãn

SELECT ?uri ?label 
WHERE { 
?uri rdfs:label ?label. 
?label bif:contains "'yago'" . 
} 

Trả lời

13

Bạn có thể thử làm như sau nếu bạn muốn làm điều đó mà không cần bộ lọc:

SELECT ?uri ?label 
WHERE { 
?uri rdfs:label "Yago"@en . 
?uri rdfs:label ?label 
} 

Tôi không chắc chắn mặc dù nó nếu nó là nhanh hơn nhiều so với truy vấn tương ứng với bộ lọc:

SELECT ?uri ?label 
WHERE { 
?uri rdfs:label ?label . 
filter(?label="Yago"@en) 
} 
+2

Tôi tin rằng truy vấn đầu tiên của bạn có mẫu gấp ba lần. –

+1

nhờ truy vấn thứ hai hiệu quả hơn, không sao chép – Sam

3

Điều chỉnh chính cho phản hồi ban đầu. Nếu bạn có một kết hợp chính xác, với các nhãn ngôn ngữ, sau đó những điều sau đây sẽ làm việc:

SELECT ?uit ?label 
WHERE { 
    ?uri rdfs:label "Yago"@en . 
} 

Tuy nhiên, nếu kết hợp chính xác có thể không được sử dụng những gì bạn muốn, SPARQL hỗ trợ một regex tiêu chuẩn:

SELECT ?uit ?label 
WHERE { 
    ?uri rdfs:label ?label . 
    FILTER regex(str(?label), "yago", "i") 
} 

... sẽ khớp với chuỗi bất kể trường hợp ký tự và bạn có thể chơi trò chơi regex thông thường để nhận được kết quả chuỗi bắt buộc. (Tất nhiên, các chức năng chuỗi khác, chẳng hạn như STRSTARTS và STRENDS sẽ hiệu quả hơn nếu những đáp ứng các tiêu chí phù hợp mong muốn.)

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