Câu hỏi thú vị, vì nó dường như đủ đơn giản và khó có thể thể hiện chính xác truy vấn. William Greenly's answer không cung cấp những gì bạn muốn, mặc dù ông hoàn toàn đúng trong lời giải thích của mình và sử dụng đúng cách property path. Để có thể hỏi đúng truy vấn phù hợp với câu hỏi của bạn, nó phải được giả định rằng tất cả các danh sách đều được hình thành (chúng chỉ có một phần tử đầu tiên, một phần còn lại và chúng kết thúc bằng một số không).
Sự cố trong truy vấn của bạn là nó sẽ tính tất cả thành viên của tất cả các danh sách trong tập dữ liệu. Bạn cần một cái gì đó để liên kết rdf:first
chỉ với phần tử của một danh sách.
Nếu bạn có một URI xác định danh sách của bạn quan tâm, bạn có thể như sau:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX ex: <http://www.example.org/#>
SELECT (COUNT(?member) AS ?count)
WHERE {
ex:uriOfTheList rdf:rest*/rdf:first ?member
}
Nhưng thường, danh sách không được xác định bởi một URI. Trong trường hợp này, có thể xác định danh sách nhất định bằng cách sử dụng các thuộc tính khác. Ví dụ, hãy tưởng tượng bạn có một tài sản ex:listOfAuthors
, bạn có thể làm:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX ex: <http://www.example.org/#>
SELECT (COUNT(?member) AS ?count)
WHERE {
ex:publication ex:listOfAuthors ?list .
?list rdf:rest*/rdf:first ?member .
}
Lưu ý rằng nếu bạn chỉ cần làm:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT (COUNT(?member) AS ?count)
WHERE {
?list rdf:rest*/rdf:first ?member .
}
bạn sẽ thêm lên tất cả các kích thước của danh sách và các danh sách con. Bây giờ mọi thứ trở nên phức tạp nếu bạn không có các vị từ mà bạn có thể đính kèm danh sách và bạn không có URI và có thể bạn muốn tính số lượng cho tất cả các danh sách, cho mỗi danh sách. Có một cách mà nên làm việc:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT (COUNT(?c) AS ?count)
WHERE {
?thing !rdf:rest ?list .
?list rdf:rest*/rdf:first ?member .
}
Điều này được nói là chúng ta muốn tìm cái gì đó kết nối với một danh sách, nhưng không phải với vị rdf:rest
. Về nguyên tắc, chỉ có sự khởi đầu của một danh sách được kết nối thông qua một vị từ cho một thực thể khác, nếu thực thể không phải là một danh sách và vị từ đó không phải là rdf:rest
. Hơn nữa, danh sách thường được kết nối bằng cách nào đó với các thực thể khác, vì sẽ không có điểm nào trong việc mô tả danh sách độc lập với bất kỳ thứ gì khác.
Cảm ơn Antoine, bạn đã xác định được một điểm quan trọng trong danh sách được kết nối với một thứ gì đó. Tôi không nghĩ về nó khi tôi thử truy vấn trên một tập dữ liệu với chỉ một danh sách trong đó. – user1278577