Базы данных: Blazegraph
Blazegraphopen in new window — RDFopen in new window-хранилище.
Запуск
Запустить Blazegraph проще всего через dockeropen in new window.
docker run -d --name blazegraph \
-p 9999:8080 \
islandora/blazegraph:3.4
1
2
3
2
3
Blazegraph Workbench
Blazegraph предоставляет Blazegraph Workbench для работы с базой данных по адресу http://debian-server:9999/bigdata/
.
Для запросов в Blazegraph используется язык SPARQLopen in new window.
Пример на Python
Пример использования библиотеки RDFLibopen in new window (документацияopen in new window):
import requests
from rdflib import Graph, URIRef, Literal, Namespace
# URL вашего экземпляра Blazegraph
BLAZEGRAPH_URL = 'http://debian-server:9999/bigdata/namespace/kb/sparql'
# Определение пространства имен
EX = Namespace("http://example.org/")
# Создание графа
g = Graph()
# Добавление осмысленных данных о книгах
g.add((EX.book1, EX.title, Literal("The Great Gatsby")))
g.add((EX.book1, EX.author, Literal("F. Scott Fitzgerald")))
g.add((EX.book1, EX.year, Literal(1925)))
g.add((EX.book2, EX.title, Literal("To Kill a Mockingbird")))
g.add((EX.book2, EX.author, Literal("Harper Lee")))
g.add((EX.book2, EX.year, Literal(1960)))
g.add((EX.book3, EX.title, Literal("The Road")))
g.add((EX.book3, EX.author, Literal("Cormac McCarthy")))
g.add((EX.book3, EX.year, Literal(2006)))
g.add((EX.book4, EX.title, Literal("The Catcher in the Rye")))
g.add((EX.book4, EX.author, Literal("J.D. Salinger")))
g.add((EX.book4, EX.year, Literal(1951)))
# Сериализация графа в формат N-Triples
data = g.serialize(format='nt')
# Вставка данных в Blazegraph
insert_query = f"""
INSERT DATA {{
{data}
}}
"""
# Выполнение запроса на вставку данных
response = requests.post(BLAZEGRAPH_URL, data={'update': insert_query})
# Проверка статуса ответа
if response.status_code == 200:
print("Данные успешно вставлены.")
else:
print(f"Error: {response.status_code}, {response.text}")
# Выполнение SPARQL-запроса с условием (книги, опубликованные после 2000 года)
query = """
SELECT ?title ?author ?year
WHERE {
?book <http://example.org/title> ?title .
?book <http://example.org/author> ?author .
?book <http://example.org/year> ?year .
FILTER(?year > 2000)
}
"""
# Выполнение запроса
response = requests.get(BLAZEGRAPH_URL, params={'query': query, 'format': 'json'})
# Проверка статуса ответа
if response.status_code == 200:
results = response.json()
print("Результаты запроса (книги, опубликованные после 2000 года):")
for result in results["results"]["bindings"]:
print(f"Title: {result['title']['value']}, Author: {result['author']['value']}, Year: {result['year']['value']}")
else:
print(f"Error: {response.status_code}, {response.text}")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
Ввод программы:
Данные успешно вставлены.
Результаты запроса (книги, опубликованные после 2000 года):
Title: The Road, Author: Cormac McCarthy, Year: 2006
1
2
3
2
3