Last updated:
0 purchases
rdflib
RDFLib #
A pure Dart package for working with RDF (resource description framework).
Features #
Create triple instances (with data types)
Create a graph to store triples without duplicates
Find triples based on criteria
Export graph to turtle ttl format (default)
Bind long namespace with customized shortened name for readability
Include reserved vocabulary of OWL 2
Parse turtle format string effectively and
store triples in the graph in memory
Getting started #
Refer to the code example below, or go to /example to find out more!
For testing the rdflib package #
# create a dart project for testing
dart create test_rdflib
cd test_rdflib
# install rdflib as the dependency with dart pub add
dart pub add rdflib
# copy the following code examples to ~/bin/test_rdflib.dart
# run the file with dart
dart run
copied to clipboard
Usage #
Head over to our GitHub repo to check out
more examples!
1. General usage #
The following code snippet shows how to:
Create a Graph instance;
Create and store triples with different data types;
Find entities based on customized criteria;
Bind shorted string to long namespace;
import 'package:rdflib/rdflib.dart';
main() {
// the following example is modified from <https://rdflib.readthedocs.io/en/stable/gettingstarted.html#a-more-extensive-example>
// Initialize a Graph
Graph g = Graph();
// Create a new URIRef instance for a person
final donna = URIRef('http://example.org/donna');
// Add triples to the Graph using [Graph.addTriplesToGroups] method
g.addTripleToGroups(donna, RDF.type, FOAF.Person);
g.addTripleToGroups(donna, FOAF.nick, Literal('donna', lang: 'en'));
g.addTripleToGroups(donna, FOAF.name, Literal('Donna Fales'));
g.addTripleToGroups(donna, FOAF.mbox, URIRef('mailto:[email protected]'));
// Adding a duplicate triple should be ignored
g.addTripleToGroups(donna, FOAF.mbox, URIRef('mailto:[email protected]'));
// Create another URIRef instance
final ed = URIRef('http://example.org/edward');
// Add triples to the Graph
g.addTripleToGroups(ed, RDF.type, FOAF.Person);
g.addTripleToGroups(ed, FOAF.nick, Literal('ed', datatype: XSD.string));
g.addTripleToGroups(ed, FOAF.name, Literal('Edward Scissorhands'));
g.addTripleToGroups(
ed, FOAF.mbox, Literal('mailto:[email protected]', datatype: XSD.anyURI));
// Bind the long namespace to shorter string for better readability
g.bind('example', Namespace(ns: 'http://example.org/'));
// Serialize the Graph to the standard turtle format, and the result is stored
// in [Graph.serializedString]
g.serialize(format: 'ttl', abbr: 'short');
print('-------\nSerialized content:\n${g.serializedString}');
// Print out every added triple in the graph by iterating through the set
print('-------\nTriples updated in the graph:');
for (Triple t in g.triples) {
print(t);
}
// Print out each person's mailbox value
print('-------\nMailboxes:');
for (var sub in g.subjects(a, FOAF.Person)) {
for (var mbox in g.objects(sub, FOAF.mbox)) {
print('${sub}\'s mailbox: ${mbox.value}');
}
}
}
copied to clipboard
2. SOLID Health Ontology Example #
import 'package:rdflib/rdflib.dart';
main() {
// Initialize a Graph
Graph g = Graph();
// Define namespaces for later use
Namespace shData = Namespace(ns: 'http://silo.net.au/data/SOLID-Health#');
Namespace shOnto =
Namespace(ns: 'http://sii.cecs.anu.edu.au/onto/SOLID-Health#');
// Create a subject
URIRef newAssessTab = shData.withAttr('AssessmentTab-p43623-20220727T120913');
// Add the entity to the Graph, equivalent to
// g.addTripleToGroups(newAssessTab, rdf.typ, owl:NamedIndividual)
g.addNamedIndividualToGroups(newAssessTab);
// Add using a Triple type
Triple t1 = Triple(
sub: newAssessTab, pre: RDF.type, obj: shOnto.withAttr('AssessmentTab'));
g.addTripleToGroups(t1.sub, t1.pre, t1.obj);
// Add directly using sub, pre, and obj
g.addTripleToGroups(
newAssessTab, shData.withAttr('asthmaControl'), 'Poor Control');
g.addTripleToGroups(
newAssessTab, shOnto.withAttr('diastolicBloodPressure'), '75');
g.addTripleToGroups(
newAssessTab, shOnto.withAttr('systolicBloodPressure'), Literal('125.0'));
URIRef newSeeAndDoTab = shData.withAttr('SeeAndDoTab-p43623-20220727T120913');
URIRef newSeeAndDoOption =
shData.withAttr('SeeAndDoOption-p43623-20220727T120913-fitnessDrive');
g.addNamedIndividualToGroups(newSeeAndDoTab);
g.addNamedIndividualToGroups(newSeeAndDoOption);
// Link two triple individuals by a relation
g.addObjectProperty(
newSeeAndDoTab, shOnto.withAttr('hasSeeAndDoOption'), newSeeAndDoOption);
// Bind to shorter abbreviations for readability
g.bind('sh-data', shData);
g.bind('sh-onto', shOnto);
// Serialize the graph for output
g.serialize(format: 'ttl', abbr: 'short');
print(g.serializedString);
}
copied to clipboard
3. Parsing local turtle file #
import 'dart:io';
import 'package:rdflib/rdflib.dart';
main() async {
String filePath = 'example/sample_ttl_1.ttl';
// Read file content to a local String
String fileContents = await File(filePath).readAsStringSync();
print('-------Original file-------\n$fileContents');
// create a graph to read turtle file and store info
Graph g = Graph();
// Parse with the new method [Graph.parseTurtle] instead of [Graph.parse] (deprecated)
g.parseTurtle(fileContents);
// Serialize the Graph for output
g.serialize(format: 'ttl', abbr: 'short');
print('-------Serialized String--------\n${g.serializedString}');
// Print out full format of triples (will use shorthand in serialization/export)
print('--------All triples in the graph-------');
for (Triple t in g.triples) {
print(t);
}
}
copied to clipboard
4. Updating ACL file #
import 'dart:io';
import 'package:http/http.dart' as http;
import 'package:rdflib/rdflib.dart';
main() async {
// https://github.com/anusii/rdflib/blob/main/example/sample_acl_1.acl
// https://raw.githubusercontent.com/anusii/rdflib/main/example/sample_acl_1.acl
var url = Uri.https('raw.githubusercontent.com',
'anusii/rdflib/main/example/sample_acl_1.acl');
// Get the contents of the acl file
var res = await http.get(url);
String aclContents = res.body;
print('-------Original ACL Contents-------\n${res.body}\n');
// Initialize a Graph to store all the info
Graph g = Graph();
// Parse the contents and update the triples
g.parseTurtle(aclContents);
g.serialize(format: 'ttl', abbr: 'short');
print('-------Serialized ACL Contents------\n${g.serializedString}\n');
// Add 'zack' to the ACL file
g.addTripleToGroups('<#zack>', a, 'acl:Authorization');
// Specify which document/fold
g.addTripleToGroups('<#zack>', 'acl:accessTo', '<./README>');
// Specify the target by its webID card
g.addTripleToGroups('<#zack>', 'acl:agent',
'<https://solid.dev.yarrabah.net/zack-collins/profile/card#me>');
// Grant him access to Read only
g.addTripleToGroups('<#zack>', 'acl:mode', 'acl:Read');
// Need to serialize before exporting
g.serialize(format: 'ttl', abbr: 'short');
print('-------Serialized ACL Contents (New)------\n${g.serializedString}\n');
}
copied to clipboard
Additional information #
Useful resources #
RDFLib
Introduction to RDF
How to contribute #
Make a pull request on our GitHub repo!
Acknowledgement #
This rdflib dart package is modelled on the RDFLib.
The parser is written with
package dart-petitparser
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.