Базы данных: Blazegraph

Blazegraphopen in new windowRDFopen in new window-хранилище.

Запуск

Запустить Blazegraph проще всего через dockeropen in new window.

docker run -d --name blazegraph \
    -p 9999:8080 \
    islandora/blazegraph:3.4
1
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

Ввод программы:

Данные успешно вставлены.
Результаты запроса (книги, опубликованные после 2000 года):
Title: The Road, Author: Cormac McCarthy, Year: 2006
1
2
3
Последниее изменение: 05.01.2025, 15:20:36