Skip to main content
European Commission logo print header

SPARQL

Przewodnik po Linked Open Data w serwisie CORDIS

Czym jest Linked Open Data?

Linked Open Data (LOD) to technologia stanowiąca połączenie Linked Data i Open Data. Linked Data oznacza dane nadające się do odczytu maszynowego udostępniane w sieci, podczas gdy Open Data pozwala na swobodne wykorzystywanie i rozpowszechnianie danych.

Linked Open Data pozwala na dostęp do zdecentralizowanej sieci w scentralizowany sposób. Technologia ta zapewnia użytkownikom środki i usługi umożliwiające znajdowanie najbardziej odpowiednich i rzetelnych informacji. Dzięki połączeniu zasad projektowania Linked Data z ustrukturyzowanymi danymi nadającymi się do odczytu maszynowego LOD pozwala na wyszukiwanie bardziej przydatnych informacji, a także otrzymanie odnośników do innych danych, które ułatwiają poszerzanie wiedzy.

Zasady FAIR (Findable, Accessible, Interoperable, Reusable – możliwe do znalezienia, dostępne, interoperacyjne i nadające się do ponownego wykorzystania) oraz 5-gwiazdkowy system wdrażania Open Data opisany przez Tima Bernersa-Lee pozwalają na swobodne udostępnianie i rozpowszechnianie danych w sieci.

Wprowadzony w ramach inicjatywy Linked Open Data Resource Description Format (RDF) stanowi podstawowy język i technologię wyrażania i publikowania informacji o danych, a także tworzenia odnośników między nimi w sieci Web. RDF pozwala na strukturyzowanie danych w formacie podmiot-orzeczenie-dopełnienie.

Graf wiedzy EURIO

Graf wiedzy reprezentuje rzeczywiste jednostki (np. projekty, organizacje, wyniki projektu, takie jak rezultaty projektu) wraz z relacjami między nimi (np. udział organizacji w projekcie) i atrybutami (np. data rozpoczęcia projektu lub numer VAT organizacji) w postaci wzajemnie połączonej sieci złożonej z węzłów i krawędzi.

Grafy wiedzy umożliwiają ustrukturyzowaną i nadającą się do odczytu maszynowego reprezentację danych, dzięki czemu ułatwiają integrację, łączenie i ponowne wykorzystanie wiedzy. Graf wiedzy EURIO wykorzystuje paradygmat reprezentacji grafów wiedzy w celu przekształcenia danych serwisu CORDIS we wzajemnie powiązane dane nadające się do odczytu maszynowego.

Dane są publikowane w trójelementowym formacie RDF (Resource Description Format ), zgodnie z zasadami Linked Open Data. Znaczenie opisanych jednostek formalnie definiuj ontologia EURIO (EUropean Information Research Ontology). Otrzymany w ten sposób graf wiedzy EURIO jest siecią połączonych ze sobą trójelementowych fraz RDF, które kodują pierwotne dane CORDIS. Można go przeszukiwać za pomocą SPARQL, czyli ustandaryzowanego języka do pobierania danych w formacie RDF i manipulowania nimi.

Ontologia EURIO

Aby poprawić widoczność, możliwość ponownego wykorzystania i dostępność treści portalu CORDIS oraz zwiększyć ich interoperacyjność semantyczną, Urząd Publikacji Komisji Europejskiej opracował ontologię EURIO (EUropean Research Information Ontology). EURIO to koncepcyjny model danych, który opiera się na sieci istniejących ontologii (schema.org, DINGO itp.) i danych odniesienia (taksonomia EuroSciVoc, lista kodów NUTS itp.). Zawiera on środki umożliwiające opisywanie między innymi informacji administracyjnych związanych z projektami badawczymi i ich grantami, takich jak daty rozpoczęcia i zakończenia, całkowity koszt i otrzymane finansowanie, informacje o organizacjach i osobach zaangażowanych, a także uzyskane wyniki projektu, takie jak lista autorów, tytuł i informacje dotyczące publikacji czasopisma.

EURIO wykorzystuje język Web Ontology Language OWL 2 do formalnego definiowania znaczenia terminów używanych do opisu jednostek CORDIS (np. projektów, organizacji itp.), ich atrybutów (np. tytułu, akronimu, nazwy prawnej itp.) oraz powiązań między nimi (np. relacji między projektem a uczestniczącymi organizacjami itp.).

Dostęp do ontologii EURIO i jej dokumentacji można uzyskać na stronie internetowej EU Vocabularies.

Używanie SPARQL do odpytywania grafu wiedzy EURIO

SPARQL jest standardowym językiem zapytań służącym do pobierania i manipulowania danymi zapisanymi w formacie RDF. Jego rozwój i ewolucja są nadzorowane przez grupę roboczą SPARQL w ramach W3C. Jest on też w pełni udokumentowany i publicznie dostępny.

Zapytania SPARQL bazują na dopasowywaniu wzorców grafów, tzn. dopasowywaniu zestawów trójelementowych wzorców tworzących wyrażenia logiczne koniunkcji (AND) lub alternatywy (OR). Wzorce te przypominają trójelementowe wyrażenia RDF, z tą różnicą, że zmienną może być każdy podmiot, orzeczenie i dopełnienie. Dany wzorzec grafu zapytań SPARQL pasuje do podgrafu przeszukiwanych danych RDF, gdy terminy RDF z tego podgrafu można zastąpić zmiennymi.

Na przykład zapytanie SPARQL mające na celu znalezienie daty rozpoczęcia projektu H2020 „Knowledge-Based Information Agent with Social Competence and Human Interaction Capabilities” na podstawie grafu wiedzy EURIO powinno wyglądać następująco:

PREFIX eurio:<http://data.europa.eu/s66#>
SELECT DISTINCT ?startDate
WHERE
{
  ?project a eurio:Project.
  ?project eurio:title "Knowledge-Based Information Agent with Social Competence and Human Interaction Capabilities" . 
  ?project eurio:startDate ?startDate .
}

Jak widzimy, uruchamiając to zapytanie, w naszym przykładzie przy pomocy interfejsu Virtuoso SPARQL, otrzymujemy datę rozpoczęcia określonego projektu, tj.1 marca 2015 r.

SPARQL Example One

Słowo kluczowe PREFIX służy do wyznaczania etykiety prefiksu (tj. skrótu) do IRI, który oznacza przestrzeń nazw terminów używanych w zapytaniu. W tym przykładzie użyliśmy terminów „Project”, „title” i „startDate” zdefiniowanych w ontologii EURIO, której IRI to http://data.europa.eu/s66#.

Zapytanie składa się z dwóch części:

  • klauzuli SELECT, która identyfikuje zmienne mające się pojawić w wynikach zapytania, a która w naszym przykładzie jest zmienną (?startDate) oznaczającą żądaną wartość daty początkowej
  • klauzuli WHERE, która tworzy wzorzec grafu mający pasować do grafu wiedzy EURIO i która w naszym przykładzie składa się z trzech trójelementowych wzorców koniunkcyjnych, tj. trzech wzorców, które muszą być dopasowane, a mianowicie:
    • trójelementowego wzorca ze zmienną (?project) odnoszącą się do przedmiotowego projektu
    • trójelementowego wzorca wskazującego informacje o tytule projektu
    • trójelementowego wzorca ze zmienną (?startDate) w pozycji dopełnienia.

Oprócz wyrażania trójelementowych wzorców SPARQL udostępnia też szereg operatorów i konstrukcji, które umożliwiają m.in. wyrażanie opcjonalnych wzorców, filtrowanie dopasowanych trójelementowych wzorców na podstawie jakiegoś warunku oraz agregowanie lub porządkowanie uzyskanych wyników.

Przeanalizujmy kolejne proste zapytanie, za pomocą którego chcemy tym razem otrzymać wszystkie projekty zawarte w grafie wiedzy EURIO wraz z ich tytułami. Używając klauzuli SELECT, wyrazimy to w następujący sposób: „SELECT ?project ?title”. Użyjemy też klauzuli WHERE, aby określić warunki, które muszą być spełnione, a mianowicie, że zmienna (?project) używana do oznaczania żądanych jednostek projektu powinna należeć do klasy eurio:Project i że zmienna (?title) powinna oznaczać wartość tytułu tych jednostek projektu. W efekcie otrzymamy następujące zapytanie:

PREFIX eurio:<http://data.europa.eu/s66#>
SELECT ?project ?title
WHERE
{
  ?project a eurio:Project.
  ?project eurio:title ?title. 
}
ORDER BY ?title
LIMIT 100

Użycie klauzuli ORDER BY pozwala nam dodatkowo uporządkować pobrane wyniki w kolejności alfabetycznej ich tytułów.

Sekwencję rosnącą można wskazać przy użyciu modyfikatora ASC() lub poprzez brak modyfikatora, natomiast sekwencja malejąca może zostać wskazana przy użyciu modyfikatora DESC().

Zapytanie w naszym przykładzie pokazuje również użycie klauzuli LIMIT, która umożliwia ustawienie górnego limitu liczby zwracanych wyników – w tym przypadku zostanie wyświetlonych tylko 100 par projektów i ich tytułów.

Aby zademonstrować użycie innego popularnego operatora, a mianowicie FILTER, załóżmy, że chcemy uzyskać tylko te projekty, których data rozpoczęcia przypada na lata 2021-2022, wraz z ich odpowiednimi tytułami. Klauzula SELECT pozostaje taka sama jak poprzednio, ponieważ nadal żądamy tych samych informacji (projektów i ich tytułów), jednak klauzula WHERE musi zostać zaktualizowana o kolejne trójelementowe wzorce, które odzwierciedlają warunek dotyczący ich daty rozpoczęcia. Rozszerzone zapytanie wygląda następująco.

PREFIX eurio:<http://data.europa.eu/s66#>
PREFIX xsd:<http://www.w3.org/2001/XMLSchema#>
<br />
SELECT ?project ?title ?startDate
WHERE
{
  ?project a eurio:Project.
  ?project eurio:title ?title. 
  ?project eurio:startDate ?startDate .
  FILTER ((?startDate >= "2021-01-01"^^xsd:date) && (?startDate<="2023-12-31"^^xsd:date))
}

Jak widać na ilustracji, za pomocą operatora FILTER możemy wyrazić warunek, który musi spełniać zmienna (?startDate), a mianowicie, że musi zawierać się w przedziale od „01-01-2021” do „31-12-2023” włącznie.

Opisane powyżej zapytania SELECT stanowią jedną z form zapytań zdefiniowanych przez SPARQL, umożliwiających określenie i wykorzystanie rozwiązań z dopasowywania wzorców do tworzenia zestawów wyników lub grafów RDF. Są to następujące operatory:

  • SELECT, który, jak widzieliśmy powyżej, zwraca wszystkie lub podzbiór zmiennych powiązanych w dopasowaniu wzorca zapytania.
  • CONSTRUCT, który zwraca graf RDF skonstruowany przez podstawienie zmiennych w zbiorze trójelementowych szablonów.
  • ASK, który zwraca wartość logiczną wskazującą, czy wzorzec zapytania jest dopasowany, czy nie.
  • DESCRIBE, który zwraca graf RDF opisujący znalezione zasoby.

Więcej informacji na temat korzystania z różnych form zapytań, a także wyczerpujący opis ogólnych cech języka zapytań SPARQL, można znaleźć w oficjalnej dokumentacji SPARQL: SPARQL 1.1 Query Language.

Jak uruchamiać zapytania federacyjne?

We wszystkich powyższych przykładach zapytania były wykonywane na danych zawartych w grafie wiedzy EURIO.

Jednak rosnąca liczba usług dotyczących zapytań SPARQL (punktów końcowych SPARQL) oferowanych przez różnych dostawców danych poprzez publikowanie ich danych jako Linked Open Data oznacza możliwość wspólnego odpytywania tych rozproszonych zbiorów danych LOD.

Do tego celu SPARQL wykorzystuje rozszerzenie SERVICE. Pozwala ono skierować część zapytania do określonego punktu końcowego SPARQL i połączyć zwrócone wyniki z wynikami otrzymanymi przy pomocy pozostałej części zapytania.

Poniższe zapytanie stanowi przykład składni zapytania federacyjnego SPARQL, za pomocą którego szukamy wskaźnika rozwoju społecznego (HDI) kraju, w którym znajduje się organizacja „UNIVERSIDAD POMPEU FABRA”, jedna z organizacji uczestniczących w projektach finansowanych przez UE zawartych w grafie wiedzy EURIO. Aby uzyskać informacje o HDI, musimy wspólnie odpytać graf wiedzy EURIO, który zawiera informacje o kraju, w którym znajduje się dana organizacja, a także zewnętrzny graf wiedzy DBpedii, zawierający między innymi informacje dotyczące HDI danego kraju.

PREFIX eurio:<http://data.europa.eu/s66#> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX owl: <http://www.w3.org/2002/07/owl#> 
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbp: <http://dbpedia.org/property/>
<br />
SELECT  ?country ?name ?hdi
WHERE {  
   ?org a eurio:Organisation . 
   ?org eurio:legalName "UNIVERSIDAD POMPEU FABRA" . 
   ?org eurio:hasSite ?site .
   ?site eurio:hasGeographicalLocation ?location .
   ?location a eurio:Country .
   ?location eurio:name ?name . 
   SERVICE <http://dbpedia.org/sparql> {
        ?dbpedia_country a dbo:Country .
        ?dbpedia_country dbp:commonName ?dbname . 
        ?dbpedia_country dbp:hdi ?hdi. 
        FILTER (lang(?dbname) = "en") 
        FILTER (STR(?name) = STR(?dbname))
   } 
}

Jak widać na ilustracji, aby wykonać to zapytanie, musimy wstawić klauzulę SERVICE wewnątrz klauzuli WHERE naszego zapytania, po czym następuje zewnętrzny punkt końcowy IRI (tj. http://dbpedia.org/sparql). W dalszej kolejności musimy określić odpowiednie trójelementowe wzorce, to znaczy, że szukamy kraju w grafie wiedzy DBpedia (zmienna ?dbpedia_country), który ma taką samą nazwę jak kraj organizacji „UNIVERSIDAD POMPEU FABRA” w grafie wiedzy EURIO (tzn., że zmienne ?name i ?dbname mają tę samą wartość), a dla którego to kraju żądamy jego wartości HDI, korzystając z odpowiedniej właściwości DBpedia (tj. dbp:hdi).

Zwracamy uwagę, że z zapytać federacyjnych należy korzystać ostrożnie, aby uniknąć wysyłania zbyt dużej liczby zapytań do zdalnych punktów końcowych SPARQL, a także uniknąć stosowania nieefektywnych wzorców zapytań, ponieważ oba te błędy mogą znacząco wydłużyć czas wykonania zapytania, często prowadząc do przekroczenia limitu czasu odpytywania i oznaczając brak możliwości uzyskania jakiegokolwiek wyniku. W związku z tym, a także dlatego, że nie można zagwarantować stabilności, dostępności i wydajności zewnętrznych punktów końcowych SPARQL, zdecydowanie zaleca się wybieranie lokalnych zrzutów grafów wiedzy (lub ich podgrafów) i poleganie na lokalnych wdrożeniach zapytań federacyjnych.

Kompletny przegląd funkcji i specyfikacji związanych z obsługą zapytań federacyjnych przez SPARQL można znaleźć w dokumentacji SPARQL: SPARQL 1.1 Federated Query.

Kopie danych

Najnowszy zrzut grafu wiedzy EURIO można pobrać z portalu europejskich danych, gdzie można również znaleźć podgrafy EURIO. Podgrafy te zawierają najbardziej istotne, samodzielne kopie relacji i atrybutów odnoszących się do każdego z głównych typów jednostek grafu wiedzy EURIO i umożliwiają bardziej szczegółowy dostęp do zawartości grafu wiedzy EURIO. Podgrafy są publikowane jako odrębne grafy nazwane, tj. jako podzbiory grafu wiedzy EURIO, z których każdy ma własną odrębną etykietę.