doc/test/rdf_lib.md
2025-03-09 19:57:55 +03:00

153 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Из перечисленных библиотек Comunica, N3.js и RDF.js поддерживают формат TriG. Давайте разберём их подробнее:
1. Comunica
Comunica — это модульная и мощная библиотека для выполнения SPARQL-запросов над RDF-данными. Она поддерживает множество форматов, включая TriG.
Особенности:
Поддержка TriG через парсеры, такие как @rdfjs/parser-n3.
Возможность выполнения SPARQL-запросов над локальными и удалёнными данными.
Поддержка сложных запросов, включая фильтры, агрегации и модификации.
Пример использования:
javascript
Copy
const newEngine = require('@comunica/actor-init-sparql').newEngine;
const engine = newEngine();
const query = `
PREFIX ex: <http://example.org/>
SELECT ?s ?p ?o
WHERE {
?s ?p ?o .
}
`;
const data = `
@prefix ex: <http://example.org/> .
ex:subject ex:predicate ex:object .
`;
engine.query(query, { sources: [{ type: 'string', value: data, mediaType: 'application/trig' }] })
.then(result => result.bindings().then(bindings => {
bindings.forEach(binding => {
console.log(`Субъект: ${binding.get('s').value}`);
console.log(`Предикат: ${binding.get('p').value}`);
console.log(`Объект: ${binding.get('o').value}`);
console.log('---');
});
}))
.catch(console.error);
2. N3.js
N3.js — это быстрая и простая библиотека для работы с RDF-данными. Она поддерживает чтение и запись TriG.
Особенности:
Поддержка TriG через метод N3.Parser.
Лёгкая интеграция с другими библиотеками RDF.js.
Высокая производительность.
Пример использования:
javascript
Copy
const N3 = require('n3');
const parser = new N3.Parser({ format: 'application/trig' });
const data = `
@prefix ex: <http://example.org/> .
ex:subject ex:predicate ex:object .
`;
parser.parse(data, (error, quad, prefixes) => {
if (quad) {
console.log(`Субъект: ${quad.subject.value}`);
console.log(`Предикат: ${quad.predicate.value}`);
console.log(`Объект: ${quad.object.value}`);
if (quad.graph.value) {
console.log(`Граф: ${quad.graph.value}`);
}
console.log('---');
}
});
3. RDF.js
RDF.js — это низкоуровневая библиотека для работы с RDF. Она поддерживает TriG через плагины, такие как @rdfjs/parser-n3.
Особенности:
Поддержка TriG через @rdfjs/parser-n3.
Гибкость и расширяемость.
Интеграция с другими библиотеками экосистемы RDF.js.
Пример использования:
javascript
Copy
import rdf from 'rdf-ext';
import formats from '@rdfjs/formats-common';
import fs from 'fs/promises';
import path from 'path';
import { Readable } from 'stream';
async function loadTrigFile(filePath) {
const trigData = await fs.readFile(filePath, 'utf-8');
const store = rdf.dataset();
const parser = formats.parsers.get('application/trig');
const stream = Readable.from([trigData]);
const quadStream = parser.import(stream);
await new Promise((resolve, reject) => {
quadStream.on('data', quad => {
store.add(quad);
});
quadStream.on('end', resolve);
quadStream.on('error', reject);
});
return store;
}
async function main() {
const filePath = path.join(process.cwd(), 'vad_2_test1.trig');
const store = await loadTrigFile(filePath);
// Вывод содержимого store
console.log('Содержимое store:');
store.forEach(quad => {
console.log(`Субъект: ${quad.subject.value}`);
console.log(`Предикат: ${quad.predicate.value}`);
console.log(`Объект: ${quad.object.value}`);
if (quad.graph.value) {
console.log(`Граф: ${quad.graph.value}`);
}
console.log('---');
});
// Вывод числа загруженных элементов
console.log(`Число загруженных TriG элементов: ${store.size}`);
}
main().catch(console.error);
Сравнение библиотек
|Библиотека |Поддержка TriG |SPARQL-запросы |Простота использования |Производительность|
|---|---|---|---|---|
|Comunica |Да |Да |Средняя |Высокая|
N3.js Да Нет Высокая Очень высокая
RDF.js Да (через плагины) Нет (требуются дополнительные библиотеки) Низкая Высокая
Рекомендации
Если вам нужны SPARQL-запросы:
Используйте Comunica. Она поддерживает TriG и позволяет выполнять сложные запросы.
Если вам нужно просто читать/записывать TriG:
Используйте N3.js. Она проста в использовании и очень быстра.
Если вам нужна гибкость и интеграция с другими библиотеками:
Используйте RDF.js с плагинами, такими как @rdfjs/parser-n3.