Получить максимальный результат от COUNT в SPARQL - PullRequest
0 голосов
/ 05 июня 2018

У меня есть этот запрос:

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 curricula: <http://www.semanticweb.org/lsarni/ontologies/curricula#>
SELECT ?topic (COUNT(?x) as ?number_of_courses)
WHERE {
   ?topic curricula:taughtIn ?x .
}
GROUP BY ?topic
ORDER BY desc(?number_of_courses)

Это возвращает:

enter image description here

Теперь я хочу получить ?topicс максимумом ?number_of_courses, в данном случае Engineering

Мне удалось получить максимум ?number_of_courses с помощью этого запроса (после этого ответа ):

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 curricula: <http://www.semanticweb.org/lsarni/ontologies/curricula#>
SELECT (MAX(?number_of_courses) AS ?maxc)
WHERE{
  {
    SELECT ?topic (COUNT(?x) as ?number_of_courses)
    WHERE {
      ?topic curricula:taughtIn ?x .
    }
    GROUP BY ?topic
  }
}

Возвращает:

enter image description here

Но мне не удается получить ?topic.

Как я могу это исправить?


Обновление

Я попробовал то, что понял из комментария AKSW:

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 curricula: <http://www.semanticweb.org/lsarni/ontologies/curricula#>
SELECT ?topic 
WHERE { 
  ?topic curricula:taughtIn ?x . 
  { 
    SELECT (MAX(?number_of_courses) AS ?max) 
    WHERE { 
      { 
        SELECT ?topic (COUNT(?x) as ?number_of_courses) 
        WHERE { 
           ?topic curricula:taughtIn ?x . 
         } 
         GROUP BY ?topic 
      }
    } 
  }
} 
GROUP BY ?topic
HAVING (COUNT(?x) = ?max)

Но ничего не возвращается.


Пример

Для этого минимального примера результат должен быть Topic_2, так как это taughtIn два курса.

@prefix : <http://www.semanticweb.org/lsarni/ontologies/curricula#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@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.semanticweb.org/lsarni/ontologies/curricula> .

<http://www.semanticweb.org/lsarni/ontologies/curricula> rdf:type owl:Ontology .

#################################################################
#    Object Properties
#################################################################

###  http://www.semanticweb.org/lsarni/ontologies/curricula#taughtIn
:taughtIn rdf:type owl:ObjectProperty ;
          rdfs:subPropertyOf owl:topObjectProperty .


###  http://www.w3.org/2002/07/owl#topObjectProperty
owl:topObjectProperty rdfs:domain :Topic ;
                      rdfs:range :Course .


#################################################################
#    Classes
#################################################################

###  http://www.semanticweb.org/lsarni/ontologies/curricula#Course
:Course rdf:type owl:Class ;
        owl:disjointWith :Topic .


###  http://www.semanticweb.org/lsarni/ontologies/curricula#Topic
:Topic rdf:type owl:Class .


#################################################################
#    Individuals
#################################################################

###  http://www.semanticweb.org/lsarni/ontologies/curricula#Course_1
:Course_1 rdf:type owl:NamedIndividual ,
                   :Course .


###  http://www.semanticweb.org/lsarni/ontologies/curricula#Course_2
:Course_2 rdf:type owl:NamedIndividual ,
                   :Course .


###  http://www.semanticweb.org/lsarni/ontologies/curricula#Topic_1
:Topic_1 rdf:type owl:NamedIndividual ,
                  :Topic ;
         :taughtIn :Course_1 .


###  http://www.semanticweb.org/lsarni/ontologies/curricula#Topic_2
:Topic_2 rdf:type owl:NamedIndividual ,
                  :Topic ;
         :taughtIn :Course_1 ,
                   :Course_2 .


###  Generated by the OWL API (version 4.2.8.20170104-2310) https://github.com/owlcs/owlapi
...