Skip to main content
European Commission logo
polski polski
CORDIS - Wyniki badań wspieranych przez UE
CORDIS
CORDIS Web 30th anniversary CORDIS Web 30th anniversary

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.

Poniższe przykłady mają na celu zaprezentowanie, w jaki sposób można konstruować zapytania SPARQL w celu wyszukiwania i pobierania informacji z grafu wiedzy EURIO.

Zacznijmy od prostego przykładu, w ramach którego uzyskamy bardziej szczegółowe informacje:

Wyszukiwanie wszystkich tytułów projektów

Słowo kluczowe PREFIX łączy etykietę z IRI przestrzeni nazw, w której zdefiniowane są encje; w ramach tego przykładu wykorzystujemy terminy „Projekt” oraz „Tytuł”, które są zdefiniowane w ontologii EURIO, której IRI to http://data.europa.eu/s66#.

Zapytanie składa się z dwóch elementów:

  • klauzuli SELECT, która pozwala na wybór zmiennych, które mają pojawić się w wynikach zapytania. W naszym przykładzie zmienna ?project_title zawiera wartość tytułu żądanego projektu (nazwy zmiennych mogą zostać wybrane przez użytkownika).
  • klauzuli WHERE, która zawiera wzorzec wykresu do dopasowania do wykresu wiedzy EURIO. W naszym przykładzie znajdują się dwa zbieżne potrójne wzorce, czyli dwa wzorce, które muszą zostać dopasowane:
    • potrójny wzorzec ze zmienną ?project wskazującą, że żądane encje projektów powinny należeć do klasy eurio:Project.
    • potrójny wzorzec zaczynający się od zmiennej ?project, w którym zmienna ?title powinna zawierać tytuły tych projektów.

Porządkujemy wyniki według tytułu za pomocą klauzuli ORDER BY, którą umieszczamy po klauzuli WHERE.

Ze względu na to, że możemy oczekiwać, że docelowa lista wyników będzie długa, używamy klauzuli LIMIT, aby wyświetlić jedynie 100 wyników. W celu demonstracji pomijamy pierwsze 1000 wyników za pomocą klauzuli OFFSET.

Pełna treść zapytania wygląda następująco:

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

Na podstawie tytułów projektów możemy chcieć znaleźć następujące informacje:

Wyszukanie dat rozpoczęcia i zakończenia projektu „taRgeted thErapy for adVanced colorEctal canceR paTients”

W tym celu należy określić te warunki w klauzuli WHERE:

  • Ustawiamy tytuł projektu (eurio:title) na ciąg znaków „taRgeted thErapy for adVanced colorEctal canceR paTients”.
  • Data rozpoczęcia projektu znajduje się w zmiennej ?project_start_date.
  • Data zakończenia projektu znajduje się w zmiennej ?project_end_date.

Zapytanie wygląda następująco:

PREFIX eurio: <http://data.europa.eu/s66#>
SELECT ?project_start_date ?project_end_date 
WHERE {
  ?project eurio:title 'taRgeted thErapy for adVanced colorEctal canceR paTients'.
  ?project eurio:startDate ?project_start_date .
  ?project eurio:endDate ?project_end_date .
}

W dalszej kolejności możemy dokładniej przyjrzeć się projektowi z poprzedniego zapytania w następujący sposób:

Wyszukiwanie uczestników projektu „taRgeted thErapy for adVanced colorEctal canceR paTients” i ich funkcji w projekcie

W klauzuli WHERE wskazujemy informacje, które chcemy uzyskać w wyniku zapytania:

  • Ustawiamy tytuł projektu (eurio:title) na ciąg znaków „taRgeted thErapy for adVanced colorEctal canceR paTients”.
  • Role organizacji zaangażowanych w projekt znajdują się w zmiennej ?organisation_role.
  • Etykieta roli organizacji znajduje się w zmiennej ?role_label.
  • Zmienna ?organisation odnosi się do powiązanych uczestników projektu.
  • Zmienna ?organisation_name zawiera nazwy prawne organizacji.
  • Należy pamiętać, że dane wyjściowe są sortowane alfabetycznie na podstawie zmiennej ?organisation_name przy użyciu ORDER BY DESC(?organisation_name).
PREFIX eurio: <http://data.europa.eu/s66#> 
SELECT ?organisation_name ?role_label
WHERE {
  ?project eurio:title 'taRgeted thErapy for adVanced colorEctal canceR paTients' .
  ?project eurio:hasInvolvedParty ?organisation_role .
  ?organisation_role eurio:roleLabel ?role_label .
  ?organisation_role eurio:isRoleOf ?organisation .
  ?organisation eurio:legalName ?organisation_name .
} 
ORDER BY DESC(?organisation_name)

Ze względu na to, że serwis CORDIS gromadzi informacje na temat badań naukowych, możemy również wykorzystać taksonomię EuroSciVoc w celu filtrowania otrzymanych wyników. EuroSciVoc to wielojęzyczna taksonomia, która obejmuje wszystkie główne dziedziny nauki opisywane w serwisie CORDIS i jest używana do klasyfikacji danych. Taksonomia ta obejmuje przeszło 1000 kategorii w 6 językach (angielskim, francuskim, niemieckim, włoskim, polskim i hiszpańskim), a każda kategoria jest opisana odpowiednimi słowami kluczowymi wyodrębnionymi z tekstowego opisu projektów CORDIS.

Kolejne dwa zapytania pokazują, w jaki sposób można połączyć uzyskane z nich informacje i wykorzystać taksonomię EuroSciVoc do ograniczenia wyników tak, by uzyskać informacje na temat dziedziny nauki o sztucznej inteligencji.

Wyszukiwanie tytułów oraz dat rozpoczęcia i zakończenia wszystkich projektów z udziałem uczestników z Grecji, dotyczących sztucznej inteligencji

W klauzuli WHERE wskazujemy informacje, które chcemy uzyskać w wyniku zapytania:

  • Poszczególne projekty muszą zostać skategoryzowane jako „sztuczna inteligencja” według taksonomii EuroSciVoc. Znajdujemy je poprzez etykietę EuroSciVoc (?euroSciVoc_label_value), w której wybieramy „artificial intelligence”. Dodajemy również „@en”, aby upewnić się, że znajdziemy wyłącznie angielską etykietę pojęcia sztucznej inteligencji.
  • Aby znaleźć projekty w Grecji, musimy wyszukać zaangażowane organizacje (na podstawie zmiennej ?organisation) i kraje, w których działają, szukając encji eurio:Country, w przypadku których eurio:name to „Greece”.
  • Tytuł projektu znajduje się w zmiennej ?project_title.
  • Data rozpoczęcia projektu znajduje się w zmiennej ?project_start_date.
  • Data zakończenia projektu znajduje się w zmiennej ?project_end_date.

Docelowe zapytanie SPARQL wygląda następująco:

PREFIX eurio: <http://data.europa.eu/s66#>
PREFIX skos-xl: <http://www.w3.org/2008/05/skos-xl#>
SELECT DISTINCT ?project_title ?project_start_date ?project_end_date 
WHERE {
  ?project eurio:title ?project_title .
  ?project eurio:startDate ?project_start_date .
  ?project eurio:endDate ?project_end_date .
  ?project eurio:hasEuroSciVocClassification ?euroSciVoc.
  ?euroSciVoc skos-xl:prefLabel ?euroSciVoc_label .
  ?euroSciVoc_label skos-xl:literalForm 'artificial intelligence'@en.
  ?role eurio:isInvolvedIn ?project .
  ?role eurio:isRoleOf ?organisation .
  ?organisation eurio:hasSite ?site .
  ?site eurio:hasGeographicalLocation ?country .
  ?country a eurio:Country;
  eurio:name 'Greece' .
}

Wyszukiwanie imion i nazwisk uczestników i ich ról we wszystkich projektach dotyczących sztucznej inteligencji w Grecji, w których biorą udział uczestnicy z Grecji

Biorąc pod uwagę żądane informacje, użyjemy podobnego zapytania jak w poprzednim punkcie, uwzględniając następujące warunki w klauzuli WHERE:

  • Poszczególne projekty muszą zostać skategoryzowane jako „sztuczna inteligencja” według taksonomii EuroSciVoc. Znajdujemy je poprzez etykietę EuroSciVoc (?euroSciVoc_label_value), w której wybieramy „artificial intelligence”. Dodajemy również „@en”, aby upewnić się, że znajdziemy wyłącznie angielską etykietę pojęcia sztucznej inteligencji.
  • Aby znaleźć projekty w Grecji, musimy wyszukać zaangażowane organizacje (na podstawie zmiennej ?organisation) i kraje, w których działają, szukając encji eurio:Country, w przypadku których eurio:name to „Greece”.
  • Parametr eurio:hasInvolvedParty zmiennej ?project znajduje się w zmiennej ?organisation_role.
  • Etykieta eurio:roleLabel zmiennej ?organisation_role znajduje się w zmiennej ?role
  • Wartość eurio:isRoleOf zmiennej ?organisation_role znajduje się w zmiennej ?organisation
  • Wartość eurio:legalName zmiennej ?organisation znajduje się w zmiennej ?organisation_name
PREFIX eurio: <http://data.europa.eu/s66#>
PREFIX skos-xl: <http://www.w3.org/2008/05/skos-xl#>
SELECT ?project_title ?role ?organisation_name 
WHERE {
  ?project eurio:hasEuroSciVocClassification ?euroSciVoc.
  ?euroSciVoc skos-xl:prefLabel ?euroSciVoc_label .
  ?euroSciVoc_label skos-xl:literalForm 'artificial intelligence'@en .
  ?project eurio:title ?project_title .
  ?project eurio:hasInvolvedParty ?organisation_role .
  ?organisation_role eurio:roleLabel ?role .
  ?organisation_role eurio:isRoleOf ?organisation .
  ?organisation eurio:legalName ?organisation_name .
  ?organisation eurio:hasSite ?site .
  ?site eurio:hasGeographicalLocation ?country .
  ?country a eurio:Country;
  eurio:name 'Greece' .
}
ORDER BY DESC(?project_title)

Badając rozwój dziedziny sztucznej inteligencji w Grecji warto pamiętać, że serwis CORDIS gromadzi także informacje dotyczące publikacji naukowych wydawanych w ramach projektów. Możemy dzięki temu rozszerzyć poprzednie zapytanie:

Wyszukanie na podstawie organizacji powiązanych projektów w dziedzinie sztucznej inteligencji i powstałe w ich ramach publikacje

W klauzuli WHERE wskazujemy informacje, które chcemy uzyskać w wyniku zapytania:

  • Poszczególne projekty muszą zostać skategoryzowane jako „sztuczna inteligencja” według taksonomii EuroSciVoc. Znajdujemy je poprzez etykietę EuroSciVoc (?euroSciVoc_label_value), w której wybieramy „artificial intelligence”. Dodajemy również „@en”, aby upewnić się, że znajdziemy wyłącznie angielską etykietę pojęcia sztucznej inteligencji.
  • Aby znaleźć daną organizację, pobieramy nazwy prawne organizacji i przechowujemy je w zmiennej ?organisation_name. Następnie wybieramy organizację za pomocą filtra: FILTER(str(?organisation_name) = 'ETHNIKO KENTRO EREVNAS KAI TECHNOLOGIKIS ANAPTYXIS').
  • W ramach zapytania przechowujemy wszystkie projekty związane z dziedziną sztucznej inteligencji w zmiennej ?project.
  • Następnie znajdujemy wszystkie powiązane role organizacji (role znajdują się w zmiennej ?role).
  • Równolegle zapytanie sprawdza, które z ról organizacji są powiązane z organizacją podaną w zapytaniu w zmiennej ?organisation.
  • W oparciu o te parametry zapytanie wybiera projekty związane z zadaną organizacją i przechowuje publikacje wydane w ramach projektów. Publikacje znajdują się w zmiennej ?result.
  • W wyniku zapytania otrzymujemy: (i) tytuł projektu, w którym uczestniczy organizacja (?project_title), (ii) tytuł publikacji (?publication_title), (iii) autora (autorów) publikacji (?authors), (iv) DOI publikacji (?doi) oraz (v) jej wydawcę (?publisher). Wyniki są uporządkowane według publikacji i tytułu projektu przy pomocy parametru ORDER BY ?publication ?project_title.
PREFIX eurio: <http://data.europa.eu/s66#>
PREFIX skos-xl: <http://www.w3.org/2008/05/skos-xl#>
SELECT ?project_title ?publication ?authors ?doi ?publisher
WHERE {
  ?organisation eurio:legalName ?organisation_name .
  ?role eurio:isRoleOf ?organisation .
  ?role eurio:isInvolvedIn ?project .
  ?project eurio:hasEuroSciVocClassification ?euroSciVoc .
  ?project eurio:title ?project_title .
  ?project eurio:hasResult ?result .
  ?result a eurio:ProjectPublication .
  ?euroSciVoc skos-xl:prefLabel ?euroSciVoc_label .
  ?euroSciVoc_label skos-xl:literalForm 'artificial intelligence'@en .
  OPTIONAL { ?result eurio:title ?publication }
  OPTIONAL { ?result eurio:doi ?doi }
  OPTIONAL { ?result eurio:author ?authors }
  OPTIONAL { ?result eurio:publisher ?publisher }
  FILTER(str(?organisation_name) = 'ETHNIKO KENTRO EREVNAS KAI TECHNOLOGIKIS ANAPTYXIS')
}
ORDER BY ?publication ?project_title

Do tej pory zajmowaliśmy się projektami dotyczącymi sztucznej inteligencji w Grecji. Być może teraz interesuje nas, w jakim stopniu temat ten jest badany w całej Europie. Zrobimy to przy pomocy następującego zapytania:

Ustalenie 10 krajów realizujących największą liczbę projektów w dziedzinie sztucznej inteligencji

Zaczynamy od określenia warunków w klauzuli WHERE:

  • Poszczególne projekty muszą zostać skategoryzowane jako „sztuczna inteligencja” według taksonomii EuroSciVoc. Znajdujemy je poprzez etykietę EuroSciVoc (?euroSciVoc_label_value), w której wybieramy “artificial intelligence”. Dodajemy również „@en”, aby upewnić się, że znajdziemy wyłącznie angielską etykietę pojęcia sztucznej inteligencji.
  • W ramach zapytania przechowujemy wszystkie projekty związane z dziedziną badań dotyczących sztucznej inteligencji w zmiennej ?project .
  • Następnie wyszukujemy wszystkie role organizacji, które są powiązane z projektami (role znajdują się w zmiennej ?role).
  • Następnie nasze zapytanie wyszukuje organizacje powiązane z rolami organizacji i przechowuje je w zmiennej ?organisation. Na koniec zapytanie wyszukuje kraje, w których znajdują się organizacje i przechowuje ich nazwy w zmiennej ?country_name.
  • Wyniki są sortowane według liczby projektów w porządku malejącym przy pomocy frazy ORDER BY DESC (?total_projects_in_country) oraz LIMIT 10, aby wyświetlić pierwsze dziesięć krajów.
PREFIX eurio: <http://data.europa.eu/s66#>
PREFIX skos-xl: <http://www.w3.org/2008/05/skos-xl#>
SELECT ?country_name (COUNT(?project) AS ?total_projects_in_country)
WHERE {
  ?project eurio:hasEuroSciVocClassification ?euroSciVoc.
  ?euroSciVoc skos-xl:prefLabel ?euroSciVoc_label .
  ?euroSciVoc_label skos-xl:literalForm 'artificial intelligence'@en .
  ?role eurio:isInvolvedIn ?project .
  ?role eurio:isRoleOf ?organisation .
  ?organisation eurio:hasSite ?site .
  ?site eurio:hasGeographicalLocation ?country .
  ?country a eurio:Country .
  ?country eurio:name ?country_name .
} 
GROUP BY ?country_name
ORDER BY DESC (?total_projects_in_country)
LIMIT 10

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.

Kolejne zapytanie łączy informacje z grafu wiedzy EURIO i EU Knowledge Graph, który obejmuje między innymi projekty Kohesio, czyli projekty finansowane przez Unię Europejską w ramach polityki spójności w okresie programowania 2014-2020. Kohesio obejmuje projekty opracowane w ramach krajowych i regionalnych programów operacyjnych współfinansowanych przez Europejski Fundusz Rozwoju Regionalnego (EFRR), Fundusz Spójności (FS) i Europejski Fundusz Społeczny (EFS), w tym Inicjatywę na rzecz zatrudnienia młodych pracowników. Kohesio obejmuje również projekty programów Europejskiej Współpracy Terytorialnej, określanych także mianem INTERREG.

To zapytanie pozwala użytkownikowi na:

Wyszukanie w bazach CORDIS i KOHESIO liczby projektów, w których uczestniczy dana organizacja, a także kwot dofinansowania

Zaczynamy od określenia warunków w klauzuli WHERE:

  • Określamy, że wartością zmiennej ?organisation_name jest „UNIVERSIDAD CARLOS III DE MADRID”.
  • Następnie wyszukuje wszystkie role organizacji powiązane z projektami (przechowywane w zmiennej ?role), wraz z informacjami o maksymalnej kwocie dofinansowania (przechowywanej w zmiennej ?grant_amount), a także upewnia się, że dane te są związane z jednostką „UNIVERSIDAD CARLOS III DE MADRID” za pośrednictwem zmiennej ?organisation.
  • Na podstawie zmiennej ?grant_payment, zapytanie analizuje dane, aby dotrzeć do kwoty finansowania, którą przechowujemy w zmiennej ?funding_amount.
  • Następnie zapytanie jest wysyłane do punktu końcowego Kohesio na podstawie nazwy organizacji z grafu wiedzy EURIO, aby uzyskać:
    1. całkowity koszt poszczególnych projektów (przechowywany w zmiennej ?total_budget)
    2. dofinansowanie ze środków UE (przechowywany w zmiennej ?eu_contribution).
  • Zapytanie zwraca: (i) całkowitą liczbę projektów w serwisie CORDIS (?total_projects_cordis), (ii) całkowitą liczbę projektów w bazie Kohesio (?total_projects_kohesio), (iii) całkowity koszt każdego projektu (?total_budget) oraz (iv) dofinansowanie ze środków UE (?eu_contribution) dla danej organizacji. Aby uzyskać wartości, należy użyć funkcji SUM, która dodaje wartości w określonym wyrażeniu.
PREFIX eurio:<http://data.europa.eu/s66#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX kohesio: <https://linkedopendata.eu/prop/direct/>
SELECT (COUNT(DISTINCT ?project_cordis) AS ?total_projects_cordis) (SUM(?funding_amount) AS ?total_funding_cordis)
(COUNT(DISTINCT ?project_kohesio) AS ?total_projects_kohesio) (SUM(?budget) AS ?total_budget_kohesio) (SUM(?eu_contribution) AS ?total_eu_contribution_kohesio)
WHERE {
  ?organisation eurio:legalName 'UNIVERSIDAD CARLOS III DE MADRID'.
  ?role eurio:isRoleOf ?organisation ;
  eurio:isInvolvedIn ?project_cordis ;
  eurio:isRecipientOf ?grant_amount .
  ?grant_amount eurio:hasPaymentAmount ?monetary_amount . 
  ?monetary_amount eurio:value ?funding_amount .
  SERVICE <https://query.linkedopendata.eu/sparql> {
    ?project_kohesio kohesio:P841 'UNIVERSIDAD CARLOS III DE MADRID' ;
      kohesio:P474 ?budget ;
      kohesio:P835 ?eu_contribution .
  }
}

Kolejne zapytanie opiera się na pojęciu „małego uniwersytetu” opartego na definicji redakcji brytyjskiego magazynu „Times Higher Education” publikującego coroczny ranking uczelni wyższych na świecie zatytułowany „Times Higher Education-QS World University Ranking”. Według tej definicji, mały uniwersytet to każdy uniwersytet, na który uczęszcza poniżej 5 000 studentów. Ze względu na to, ze dane na ten temat nie są dostępne w serwisie CORDIS, wykorzystamy bazę Wikidata - bezpłatną, wielojęzyczną, wtórną bazę wiedzy, gromadzącą uporządkowane dane na potrzeby serwisów Wikipedia, Wikimedia Commons, innych encyklopedii działających w ramach ruchu Wikimedia i wszystkich użytkowników na świecie.

To zapytanie umożliwia użytkownikowi:

Wyszukanie wszystkich małych uniwersytetów i państw, w których działają, a także tytuły i identyfikatory projektów dotyczących bezpieczeństwa leków, w których uczestniczą

Zaczynamy od określenia warunków w klauzuli WHERE:

  • Poszczególne projekty muszą zostać skategoryzowane jako „bezpieczeństwo leków” według taksonomii EuroSciVoc. Znajdujemy je poprzez etykietę EuroSciVoc (?euroSciVoc_label_value), w której wybieramy „drug safety”. Dodajemy również „@en”, aby upewnić się, że znajdziemy wyłącznie angielską etykietę pojęcia bezpieczeństwa leków.
  • Zapytanie przechowuje wszystkie projekty związane z bezpieczeństwem leków, ich tytuły i identyfikatory umów grantowych w zmiennej ?project.
  • Następnie wyszukujemy wszystkie role organizacji, które są powiązane z projektami (role znajdują się w zmiennej ?role).
  • Nazwy uczelni przechowywane w zmiennej organisation_name, a numer identyfikacji podatkowej znajduje się w zmiennej ?vat_number. Używamy numeru identyfikacji podatkowej uniwersytetów, aby dopasować ich dane w serwisie Wikidata - stanowi jednoznaczny i niepowtarzalny identyfikator jednostki.
  • Na koniec zapytanie wyszukuje kraje, w których znajdują się organizacje i przechowuje ich nazwy w zmiennej ?country_name.
  • Poza wyszukaniem uczelni, używamy także zmiennej ?statement w serwisie Wikidata, która zawiera zarówno informacje o liczbie studentów (?students), jak i datę zebrania tych danych (?time, która stanowi kolejny przykład zmiennej ?statement, która zawiera rzeczywistą datę w zmiennej ?date).
  • Ze względu na to, że potrzebujemy określonych zestawów informacji, używamy dwóch funkcji FILTER:
    1. Pierwsza filtruje wszystkie uczelnie, na które uczęszcza mniej niż 5 000 studentów
    2. Druga wykorzystuje funkcję YEAR w odniesieniu do zmiennej ?date, aby uzyskać na jej podstawie rok, na przykład zmieniając „1 stycznia 2022” na „2022” w celu ujednolicenia sposobu wyświetlania daty. Wartość filtra jest ustawiona na 2020 rok, co pozwala uwzględnić najnowsze informacje na temat liczby studentów.
  • Zapytanie zwraca: (i) nazwę uniwersytetu (?organisation_name), (ii) tytuł projektu, w którym uczestniczy dana uczelnia (?project_title) oraz (iii) identyfikator umowy o dofinansowanie (?id).
PREFIX eurio:<http://data.europa.eu/s66#>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
PREFIX skos-xl: <http://www.w3.org/2008/05/skos-xl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX p: <http://www.wikidata.org/prop/>
PREFIX pqv: <http://www.wikidata.org/prop/qualifier/value/>
PREFIX ps: <http://www.wikidata.org/prop/statement/>
PREFIX wikibase: <http://wikiba.se/ontology#> 
SELECT DISTINCT ?organisation_name ?project_title ?id 
WHERE { 
  ?role eurio:isRoleOf ?organisation .
  ?role eurio:isInvolvedIn ?project .
  ?project eurio:title ?project_title .
  ?project eurio:identifier ?id .
  ?project eurio:hasEuroSciVocClassification ?euroSciVoc.
  ?euroSciVoc skos-xl:prefLabel ?euroSciVoc_label .
  ?euroSciVoc_label skos-xl:literalForm 'drug safety'@en .
  ?organisation eurio:legalName ?organisation_name .
  ?organisation eurio:vatNumber ?vat_number.
  ?organisation eurio:hasSite ?site .
  ?site eurio:hasGeographicalLocation ?country .
  ?country a eurio:Country .
  ?country eurio:name ?country_name .
  SERVICE <https://query.wikidata.org/sparql> {
    ?wikidata_org wdt:P3608 ?vat_number .
    ?wikidata_org p:P2196 ?statement.
    ?statement pqv:P585 ?time .
    ?statement ps:P2196 ?students .
    ?time wikibase:timeValue ?date .
    FILTER (YEAR(?date) >= 2020)
    FILTER(?students < 5000)
  }
}

Następne zapytanie federacyjne rozszerza wyszukiwanie o dane z bazy CELLAR. Cellar to ogólne repozytorium danych należące do Urzędu Publikacji Unii Europejskiej. Cyfrowe publikacje i metadane są przechowywane i rozpowszechniane za pośrednictwem repozytorium Cellar, dzięki któremu mogą być wykorzystywane przez ludzi i maszyny. Z myślą o zapewnieniu sprawnej obsługi, serwis Cellar przechowuje wielojęzyczne publikacje i metadane, jest otwarty dla wszystkich obywateli UE i udostępnia dane w formatach możliwych do przetwarzania przez maszyny.

Jako oficjalne repozytorium Urzędu Publikacji Unii Europejskiej, serwis CELLAR zawiera kilka tabel organów, z których jedna obejmuje kraje i terytoria i zawiera dodatkowe informacje geopolityczne, których brakuje w serwisie CORDIS.

Kolejne trzy zapytania pokazują, jak można wyodrębnić trzy informacje, dopasowując kraje i terytoria z serwisu CELLAR do krajów w serwisie CORDIS za pomocą kodów ISO 3166-1 alpha-2. Mowa o:

  • Kontynentach - zapytanie wykorzystuje pojęcie kontynentu, aby znaleźć wszystkich uczestników projektów z Afryki, wraz z identyfikatorem i tytułem projektu.
  • Regionach geograficznych - zapytanie wykorzystuje geoschemat Organizacji Narodów Zjednoczonych, który grupuje kraje w ramach regionów i terytoriów zgodnie z geoschematem ONZ, aby znaleźć wszystkich uczestników projektów, a także identyfikatory i tytuły projektów, z regionu geograficznego Afryki Zachodniej.
  • Partnerstwach międzynarodowych - zapytanie wykorzystuje partnerstwa międzynarodowe, takie jak Południowe Sąsiedztwo, aby znaleźć wszystkich uczestników projektów, wraz z ich identyfikatorami i tytułami, należących do tego konkretnego partnerstwa, które obejmuje dziesięć państw partnerskich: Algierię, Egipt, Izrael, Jordanię, Liban, Libię, Maroko, Palestynę, Syrię i Tunezję.

Wyszukanie projektów, w których biorą udział uczestnicy z Afryki

Zaczynamy od określenia warunków zapytania w klauzuli WHERE:

  • Zapytanie rozpoczynamy od odpytania bazy danych CELLAR, wskazując graf http://publications.europa.eu/resource/authority/country, aby pobrać z niego wszystkie kraje na podstawie informacji skos:notation. Zapytanie filtruje zmienną ?cellar_code, aby zapewnić zgodność z typem danych ISO 3166-1 alpha-2.
  • W bloku SERVICE zapytanie sprawdza, czy dany kraj znajduje się w Afryce, używając właściwości ogcgs:sfWithin w celu powiązania określonych krajów z URI kontynentu afrykańskiego (http://publications.europa.eu/resource/authority/continent/AFRICA), który pochodzi z tabeli kontynentów.
  • Dla każdego projektu zapytanie pobiera tytuł projektu (przechowywany w zmiennej ?project_title), identyfikator umowy o dofinansowanie (przechowywany w zmiennej ?id) oraz nazwę prawną powiązanej organizacji (przechowywaną w zmiennej ?organisation_name). Gromadzi również informacje o położeniu geograficznym siedziby organizacji, które obejmują nazwę kraju (przechowywaną w zmiennej ?country_name).
  • Ponadto zapytanie wiąże ciąg znaków kodu z bazy danych CELLAR ze zmienną ?cordis_code w celu identyfikacji nazwy państwa w adresie organizacji w serwisie CORDIS.
  • Zapytanie zwraca: (i) tytuł projektu, w którym uczestniczy dana organizacja (?project_title), (ii) identyfikator umowy o dofinansowanie (?id), (iii) nazwę organizacji (?organization_name) oraz (iv) kraj organizacji (?country_name). Używając klauzuli ORDER BY ASC (?country_name), sortujemy wyniki alfabetycznie w porządku rosnącym na podstawie nazwy kraju.
PREFIX eurio:<http://data.europa.eu/s66#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX ogcgs: <http://www.opengis.net/ont/geosparql#>
SELECT ?project_title ?id ?organisation_name ?country_name
WHERE {
  SERVICE <https://publications.europa.eu/webapi/rdf/sparql>
    {GRAPH <http://publications.europa.eu/resource/authority/country>{
      ?s skos:notation ?cellar_code.
      FILTER(datatype(?cellar_code)=<http://publications.europa.eu/ontology/euvoc#ISO_3166_1_ALPHA_2>)
      ?s ogcgs:sfWithin <http://publications.europa.eu/resource/authority/continent/AFRICA> 
    }
  }
  BIND(STR(?cellar_code) as ?cordis_code)
  ?project eurio:title ?project_title .
  ?project eurio:identifier ?id .
  ?project eurio:hasInvolvedParty ?participant . 
  ?participant eurio:isRoleOf ?organisation . 
  ?organisation eurio:legalName ?organisation_name .
  ?organisation eurio:hasSite ?site .
  ?site eurio:hasAddress ?address .
  ?address eurio:addressCountry ?cordis_code .
  ?site eurio:hasGeographicalLocation ?country .
  ?country a eurio:Country.
  ?country eurio:name ?country_name .
}
ORDER BY ASC(?country_name)

a name="west-african-participants"> Wyszukanie projektów, w których biorą udział uczestnicy z Afryki Zachodniej

To zapytanie jest analogiczne jak poprzednie zapytanie. Jedyna różnica polega na zmianie parametrów filtra geograficznego w polu SERVICE, aby wyszukać kraje należące do regionu geograficznego Afryki Zachodniej. W tym celu zapytanie przechowuje nazwę regionu w zmiennej ?unsd_geoscheme i znajduje go, stosując dwie funkcje FILTER:

  • Pierwszy filtr zawęża wyszukiwanie parametru skos:notation do parametrów zawierających typ danych http://publications.europa.eu/ontology/euvoc#UNSD_GEOSCHEME.
  • Drugi filtr pozwala na zawężenie wyszukiwania do wartości zmiennej ?unsd_geoscheme, która powinna zawierać ciąg znaków „Western Africa” przy użyciu funkcji CONTAINS, która sprawdza, czy dana zmienna zawiera zadany ciąg.

Przykład zapytania znajduje się poniżej:

PREFIX eurio:<http://data.europa.eu/s66#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT ?project_title ?id ?organisation_name ?country_name
WHERE {
  SERVICE <https://publications.europa.eu/webapi/rdf/sparql> {
    GRAPH <http://publications.europa.eu/resource/authority/country>{
      ?s skos:notation ?cellar_code.
      FILTER(datatype(?cellar_code)=<http://publications.europa.eu/ontology/euvoc#ISO_3166_1_ALPHA_2>) 
      ?s skos:notation ?unsd_geoscheme .
      FILTER(datatype(?unsd_geoscheme)=<http://publications.europa.eu/ontology/euvoc#UNSD_GEOSCHEME>)
      FILTER(CONTAINS(?unsd_geoscheme,'Western Africa')) 
    }
  }
  BIND(STR(?cellar_code) as ?cordis_code)
  ?project eurio:title ?project_title .
  ?project eurio:identifier ?id .
  ?project eurio:hasInvolvedParty ?participant . 
  ?participant eurio:isRoleOf ?organisation . 
  ?organisation eurio:hasSite ?site .
  ?organisation eurio:legalName ?organisation_name .
  ?site eurio:hasGeographicalLocation ?country .
  ?country a eurio:Country .
  ?country eurio:name ?country_name .
  ?site eurio:hasAddress ?address .
  ?address eurio:addressCountry ?cordis_code .
}
ORDER BY ASC(?country_name)

Wyszukanie projektów, w których biorą udział uczestnicy wchodzący w skład Południowego Sąsiedztwa

To zapytanie jest analogiczne jak poprzednie dwa zapytania. Jedyna różnica polega na zmianie parametrów filtra geograficznego w polu SERVICE, ze względu na konieczność wyszukania państw należących do Południowego Sąsiedztwa. W tym celu przechowuje relację między danym państwem a udziałem w Południowym Sąsiedztwie za pomocą właściwości org:hasMembership, która prowadzi do URI partnerstwa, do którego należy dane państwo, czyli http://publications.europa.eu/resource/authority/corporate-body/ENP-SOUTH.

Przykład zapytania znajduje się poniżej:

PREFIX eurio:<http://data.europa.eu/s66#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX org: <http://www.w3.org/ns/org#> 
SELECT ?project_title ?id ?organisation_name ?country_name
WHERE {
  SERVICE <https://publications.europa.eu/webapi/rdf/sparql> {
    GRAPH <http://publications.europa.eu/resource/authority/country>{
      ?s skos:notation ?cellar_code.
      FILTER(datatype(?cellar_code)=<http://publications.europa.eu/ontology/euvoc#ISO_3166_1_ALPHA_2>) 
      ?s org:hasMembership ?international_partnership .
      ?international_partnership org:organization <http://publications.europa.eu/resource/authority/corporate-body/ENP-SOUTH>}
  }
  BIND(STR(?cellar_code) as ?cordis_code)
  ?project eurio:title ?project_title .
  ?project eurio:identifier ?id .
  ?project eurio:hasInvolvedParty ?participant . 
  ?participant eurio:isRoleOf ?organisation . 
  ?organisation eurio:legalName ?organisation_name .
  ?organisation eurio:hasSite ?site .
  ?site eurio:hasGeographicalLocation ?country .
  ?country a eurio:Country .
  ?country eurio:name ?country_name .
  ?site eurio:hasAddress ?address .
  ?address eurio:addressCountry ?cordis_code .
}
ORDER BY ASC(?country_name)

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ę.