Viewing file: swap_primer.py (3.03 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
# http://www.w3.org/2000/10/swap/Primer
# This is a simple primer using some of the # example stuff in the above Primer on N3 # get RDFLib at http://rdflib.net/
# Load up RDFLib
from rdflib import *
# Firstly, it doesn't have to be so complex. # Here we create a "Graph" of our work. # Think of it as a blank piece of graph paper!
primer = ConjunctiveGraph() myNS = Namespace('#')
primer.add((myNS.pat, myNS.knows, myNS.jo)) # or: primer.add((myNS['pat'], myNS['age'], long(24)))
# Now, with just that, lets see how the system # recorded *way* too many details about what # you just asserted as fact. #
from pprint import pprint pprint(list(primer))
# just think .whatever((s, p, o)) # here we report on what we know
pprint(list(primer.subjects())) pprint(list(primer.predicates())) pprint(list(primer.objects()))
# and other things that make sense
# what do we know about pat? pprint(list(primer.predicate_objects(myNS.pat)))
# who is what age? pprint(list(primer.subject_objects(myNS.age)))
# Okay, so lets now work with a bigger # dataset from the example, and start # with a fresh new graph.
primer = ConjunctiveGraph()
# Lets start with a verbatim string straight from the primer text:
mySource = """
@prefix : <http://www.w3.org/2000/10/swap/Primer#>. @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix owl: <http://www.w3.org/2002/07/owl#> . @prefix dc: <http://purl.org/dc/elements/1.1/> . @prefix foo: <http://www.w3.org/2000/10/swap/Primer#>. @prefix swap: <http://www.w3.org/2000/10/swap/>.
<> dc:title "Primer - Getting into the Semantic Web and RDF using N3".
<#pat> <#knows> <#jo> . <#pat> <#age> 24 . <#al> is <#child> of <#pat> .
<#pat> <#child> <#al>, <#chaz>, <#mo> ; <#age> 24 ; <#eyecolor> "blue" .
:Person a rdfs:Class.
:Pat a :Person.
:Woman a rdfs:Class; rdfs:subClassOf :Person .
:sister a rdf:Property.
:sister rdfs:domain :Person; rdfs:range :Woman.
:Woman = foo:FemaleAdult . :Title a rdf:Property; = dc:title .
""" # --- End of primer code
# To make this go easier to spit back out... # technically, we already created a namespace # with the object init (and it added some namespaces as well) # By default, your main namespace is the URI of your # current working directory, so lets make that simpler:
myNS = Namespace(URIRef('http://www.w3.org/2000/10/swap/Primer#')) primer.bind('', myNS) primer.bind('owl', 'http://www.w3.org/2002/07/owl#') primer.bind('dc', 'http://purl.org/dc/elements/1.1/') primer.bind('swap', 'http://www.w3.org/2000/10/swap/') sourceCode = StringInputSource(mySource, myNS)
# Lets load it up!
primer.parse(sourceCode, format='n3')
# Now you can query, either directly straight into a list:
[(x, y, z) for x, y, z in primer]
# or spit it back out (mostly) the way we created it:
print primer.serialize(format='n3')
# for more insight into things already done, lets see the namespaces
list(primer.namespaces())
# lets ask something about the data
list(primer.objects(myNS.pat, myNS.child))
|