2010-07-17 25 views
7

Tôi đang sử dụng dòng này trong một truy vấn SPARQL trong chương trình python của tôi:Làm thế nào để sử dụng hợp lý HOẶC trong SPARQL regex()?

FILTER regex(?name, "%s", "i") 

(nơi %s là nội dung tìm kiếm nhập vào bởi người sử dụng)

Tôi muốn này để phù hợp nếu một trong hai ?name hay ?featurename chứa %s, nhưng tôi không thể tìm thấy bất kỳ tài liệu hoặc hướng dẫn nào để sử dụng regex(). Tôi đã thử một vài điều mà có vẻ hợp lý:

FILTER regex((?name | ?featurename), "%s", "i") 
FILTER regex((?name || ?featurename), "%s", "i") 
FILTER regex((?name OR ?featurename), "%s", "i") 
FILTER regex((?name, ?featurename), "%s", "i") 

và mỗi người trong số những người mà không có sự ()

FILTER regex(?name, "%s", "i") || regex(?featurename, "%s", "i") 

đúng cách để làm điều này là gì? Cảm ơn

CẬP NHẬT: Sử dụng công trình UNION. Nhưng tôi đã tìm ra rằng nó cũng hoạt động nếu bạn chỉ cần lặp lại một phần regex() như sau:

FILTER (regex(?name, "%s", "i") || regex(?featurename, "%s", "i")) 

Cả hai giải pháp có vẻ một chút lộn xộn trong đó bạn phải sử dụng một tuple 2 phần tử với bản sao của cùng một chuỗi để điền vào cả hai %s s.

Trả lời

15

Điều này thì sao?

SELECT ?thing 
WHERE { 
    { 
    ?thing x:name ?name . 
    FILTER regex(?name, "%s", "i") 
    } UNION { 
    ?thing x:featurename ?name . 
    FILTER regex(?featurename, "%s", "i") 
    } 
} 
Các vấn đề liên quan