Interesante pregunta, ya que parece bastante simple y, sin embargo, es difícil expresar correctamente la consulta. William Greenly's answer no proporciona lo que desea, aunque tiene toda la razón en sus explicaciones y utiliza correctamente un property path. Para poder hacer correctamente la consulta correcta que responde a su pregunta, debe suponerse que todas las listas están bien formadas (solo tienen un primer elemento, un descanso y terminan con un cero).
El problema en su consulta es que contará todos los miembros de todas las listas en el conjunto de datos. Necesita algo para relacionar el rdf:first
con solo el elemento de una lista.
Si usted tiene un URI que identifica la lista tiene interés en conocer, puede lo siguiente:
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
}
Pero a menudo, las listas no son identificados por un URI. En este caso, es posible identificar ciertas listas mediante el uso de otras propiedades. Por ejemplo, imagine que tiene una propiedad ex:listOfAuthors
, que puede hacer:
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 .
}
Tenga en cuenta que si lo único que haces:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT (COUNT(?member) AS ?count)
WHERE {
?list rdf:rest*/rdf:first ?member .
}
se le suman todos los tamaños de las listas y sublistas . Ahora las cosas se complican si no tiene los predicados a los que puede adjuntar la lista y no tiene un URI y tal vez desea obtener el recuento de todas las listas, por lista. Hay una manera que debería funcionar:
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 .
}
Lo que esto quiere decir es que queremos encontrar algo que se conecta a una lista, pero no con el predicado rdf:rest
. En principio, solo el comienzo de una lista se conecta mediante un predicado a otra entidad, si la entidad no es una lista en sí misma y el predicado no es rdf:rest
. Además, las listas normalmente siempre están conectadas de alguna manera con otras entidades, ya que no tendría sentido describir una lista independientemente de cualquier otra cosa.
Gracias Antoine, identificó un punto muy importante de la lista de estar conectado a algo. No pensé en eso cuando intenté la consulta en un conjunto de datos con solo una lista. – user1278577