1

SPARQL でクエリを実行して、ほとんどの学部生がいる州と各州の大学を検索したいと考えています。

私はこれを試しました:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbpr: <http://dbpedia.org/resource/>
PREFIX dbpo: <http://dbpedia.org/ontology/>
PREFIX dbpprop: <http://dbpedia.org/property/>
PREFIX dbpedia: <http://dbpedia.org/resource/>
SELECT ?University ?State (MAX(?nu) AS ?size)
    WHERE{
        ?University dbpo:numberOfUndergraduateStudents ?nu.
        ?University a dbpo:University.
        ?University dbpo:state ?State.
        {
        SELECT ?State
            WHERE{
                ?State a dbpo:PopulatedPlace.
                ?State a dbpo:AdministrativeRegion.
                ?State dbpo:country dbpedia:United_States.
                ?State dbpo:capital ?Capital.
                FILTER(bound(?Capital))
            }
        }
    }

ただし、期待した出力が返されません。1 つの州から複数の学校を返します。誰でも私を案内できますか?

4

2 に答える 2

5

内側の SELECT は必要ありません (外側のブロックに配置できます)。

FILTER(bound(?Capital))

-- ?資本は拘束されなければなりません。

次に、必要があります

GROUP BY ?State

これを内側の SELECT に入れ、外側の SELECT を使用して、そのサイズ、状態の実際の大学 (-ies) を見つけます。

現在、あなたのクエリは技術的に違法です:

SELECT ?University ?State (MAX(?nu) AS ?size)

GROUP BY なしは間違っています。GROUP BY 変数と集計のみを選択できます

于 2013-03-17T19:09:32.353 に答える
2

AndyS が言うように: ここで物事を行う順序は

  1. 州ごとの学部学生数の最大値を求めます。
  2. その数の学部生がいる大学を見つけます。

最初のステップはサブクエリに入り、2 番目のステップは外側のクエリに入ります。次に、これを取得します。

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbpr: <http://dbpedia.org/resource/>
PREFIX dbpo: <http://dbpedia.org/ontology/>
PREFIX dbpprop: <http://dbpedia.org/property/>
PREFIX dbpedia: <http://dbpedia.org/resource/>
SELECT ?University ?State ?size
WHERE{
    ?University dbpo:numberOfUndergraduateStudents ?size.
    ?University a dbpo:University.
    ?University dbpo:state ?State.
    {
    SELECT ?State (MAX(?nu) as ?size)
        WHERE{
            ?State a dbpo:PopulatedPlace.
            ?State a dbpo:AdministrativeRegion.
            ?State dbpo:country dbpedia:United_States.
            ?State dbpo:capital ?Capital.
            ?University dbpo:numberOfUndergraduateStudents ?nu.
            ?University a dbpo:University.
            ?University dbpo:state ?State.
            FILTER(bound(?Capital))
        }
        GROUP BY ?State
    }
}
于 2013-03-19T16:53:18.407 に答える