Я пытаюсь сделать запрос SPARQL, который возвращает количество различных значений каждого свойства данных файла Turtle. Я хотел бы знать, как называется каждое значение и сколько раз каждое повторялось. Я создал простую онтологию для тестирования:
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix uni: <http://www.example.com/university#> .
@prefix xml: <http://www.w3.org/XML/1998/namespace> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@base <http://www.example.com/university> .
<http://www.example.com/university> rdf:type owl:Ontology .
#################################################################
# Classes
#################################################################
### http://www.example.com/university#Lecturer
:Lecturer rdf:type owl:Class ;
rdfs:subClassOf :Person .
### http://www.example.com/university#Person
:Person rdf:type owl:Class .
#################################################################
# Individuals
#################################################################
### http://www.example.com/university#Lecturer1
:Lecturer1 rdf:type owl:NamedIndividual ,
:Lecturer ;
:first_name "John"^^xsd:string ;
:last_name "Coles"^^xsd:string ;
:staffID "234"^^xsd:int .
### http://www.example.com/university#Lecturer2
:Lecturer2 rdf:type owl:NamedIndividual ,
:Lecturer ;
:first_name "John"^^xsd:string ;
:last_name "Doe"^^xsd:string ;
:staffID "89387"^^xsd:int .
### http://www.example.com/university#lecturer3
:lecturer3 rdf:type owl:NamedIndividual ,
:Lecturer ;
:first_name "John"^^xsd:string ;
:last_name "Doe"^^xsd:string ;
:staffID "7658"^^xsd:int .
#################################################################
# General axioms
#################################################################
[ rdf:type owl:AllDisjointClasses ;
owl:members (
:Lecturer
)
] .
И это запрос SPARQL, который я использую:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX uni: <http://www.example.com/university#>
select distinct ?ind ?property ?value (count(?value) as ?noOfDistinctValues) where {
?ind rdf:type uni:Lecturer .
?ind ?property ?value .
?property a owl:DatatypeProperty
}
group by ?ind ?property ?value
и вот результаты (количество не имеет для меня смысла), и я уверен, что с моим запросом что-то не так:
ind property value noOfDistinctValues
------------------------------------------------------------
lecturer2 staffID 89387 6
lecturer2 first_name John 8
lecturer2 last_name Doe 8
lecturer1 staffID 234 6
lecturer1 first_name John 8
lecturer1 last_name Coles 8
lecturer3 staffID 7658 6
lecturer3 first_name John 8
lecturer3 last_name Doe 8
Что я ищу:
property value noOfDistinctValues
------------------------------------------
staffID 89387 1
first_name John 3
last_name Doe 2
staffID 234 1
last_name Coles 1
staffID 7658 1
Я даже не уверен, что считается, что его возвращают. Я также новичок в Ontology и SPARQL.
Я очень ценю вашу помощь
?ind
и?value
изgroup by
иselect
. - person Stanislav Kralin   schedule 18.01.2020?value
, числа будут еще более запутанными, и мне нужно посмотреть, что это за значения. Я мог бы удалить? - person DjSh   schedule 18.01.2020?ind
:select ?property ?value (count(?ind) as ?noOfValueOccurrences) where { ?ind rdf:type uni:Lecturer . ?ind ?property ?value . ?property a owl:DatatypeProperty } group by ?property ?value
- person UninformedUser   schedule 18.01.2020select ?property (count(distinct ?value) as ?noOfTotalValuesForProperty) where { ?ind rdf:type uni:Lecturer . ?ind ?property ?value . ?property a owl:DatatypeProperty } group by ?property
- person UninformedUser   schedule 18.01.2020@base
потребуется использование<#Lecturer>
и т. д. Когда вы используете:Lecture
, вы должны определить@prefix : <...> .
Кроме того, пространство именuni:
отличается данными и запросом. Но в любом случае мой запрос работает как положено. Вы должны скопировать и вставить его, я пробовал с Apache Jena из CLI - person UninformedUser   schedule 18.01.2020