Mercurial > repos > shellac > guppy_basecaller
diff env/lib/python3.7/site-packages/rdflib/extras/describer.py @ 5:9b1c78e6ba9c draft default tip
"planemo upload commit 6c0a8142489327ece472c84e558c47da711a9142"
author | shellac |
---|---|
date | Mon, 01 Jun 2020 08:59:25 -0400 |
parents | 79f47841a781 |
children |
line wrap: on
line diff
--- a/env/lib/python3.7/site-packages/rdflib/extras/describer.py Thu May 14 16:47:39 2020 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,269 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -from rdflib import py3compat -__doc__ = py3compat.format_doctest_out(""" -A Describer is a stateful utility for creating RDF statements in a -semi-declarative manner. It has methods for creating literal values, rel and -rev resource relations (somewhat resembling RDFa). - -The `rel` and ``rev`` methods return a context manager which sets the current -about to the referenced resource for the context scope (for use with the -``with`` statement). - -Full example in the ``to_rdf`` method below:: - - >>> import datetime - >>> from rdflib.graph import Graph - >>> from rdflib.namespace import Namespace, RDFS, FOAF - >>> - >>> ORG_URI = "http://example.org/" - >>> - >>> CV = Namespace("http://purl.org/captsolo/resume-rdf/0.2/cv#") - >>> - >>> class Person(object): - ... def __init__(self): - ... self.first_name = %(u)s"Some" - ... self.last_name = %(u)s"Body" - ... self.username = "some1" - ... self.presentation = %(u)s"Just a Python & RDF hacker." - ... self.image = "/images/persons/" + self.username + ".jpg" - ... self.site = "http://example.net/" - ... self.start_date = datetime.date(2009, 9, 4) - ... def get_full_name(self): - ... return %(u)s" ".join([self.first_name, self.last_name]) - ... def get_absolute_url(self): - ... return "/persons/" + self.username - ... def get_thumbnail_url(self): - ... return self.image.replace('.jpg', '-thumb.jpg') - ... - ... def to_rdf(self): - ... graph = Graph() - ... graph.bind('foaf', FOAF) - ... graph.bind('cv', CV) - ... lang = 'en' - ... d = Describer(graph, base=ORG_URI) - ... d.about(self.get_absolute_url()+'#person') - ... d.rdftype(FOAF.Person) - ... d.value(FOAF.name, self.get_full_name()) - ... d.value(FOAF.firstName, self.first_name) - ... d.value(FOAF.surname, self.last_name) - ... d.rel(FOAF.homepage, self.site) - ... d.value(RDFS.comment, self.presentation, lang=lang) - ... with d.rel(FOAF.depiction, self.image): - ... d.rdftype(FOAF.Image) - ... d.rel(FOAF.thumbnail, self.get_thumbnail_url()) - ... with d.rev(CV.aboutPerson): - ... d.rdftype(CV.CV) - ... with d.rel(CV.hasWorkHistory): - ... d.value(CV.startDate, self.start_date) - ... d.rel(CV.employedIn, ORG_URI+"#company") - ... return graph - ... - >>> person_graph = Person().to_rdf() - >>> expected = Graph().parse(data='''<?xml version="1.0" encoding="utf-8"?> - ... <rdf:RDF - ... xmlns:foaf="http://xmlns.com/foaf/0.1/" - ... xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - ... xmlns:cv="http://purl.org/captsolo/resume-rdf/0.2/cv#" - ... xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"> - ... <foaf:Person rdf:about="http://example.org/persons/some1#person"> - ... <foaf:name>Some Body</foaf:name> - ... <foaf:firstName>Some</foaf:firstName> - ... <foaf:surname>Body</foaf:surname> - ... <foaf:depiction> - ... <foaf:Image - ... rdf:about= - ... "http://example.org/images/persons/some1.jpg"> - ... <foaf:thumbnail - ... rdf:resource= - ... "http://example.org/images/persons/some1-thumb.jpg"/> - ... </foaf:Image> - ... </foaf:depiction> - ... <rdfs:comment xml:lang="en"> - ... Just a Python & RDF hacker. - ... </rdfs:comment> - ... <foaf:homepage rdf:resource="http://example.net/"/> - ... </foaf:Person> - ... <cv:CV> - ... <cv:aboutPerson - ... rdf:resource="http://example.org/persons/some1#person"> - ... </cv:aboutPerson> - ... <cv:hasWorkHistory> - ... <rdf:Description> - ... <cv:startDate - ... rdf:datatype="http://www.w3.org/2001/XMLSchema#date" - ... >2009-09-04</cv:startDate> - ... <cv:employedIn rdf:resource="http://example.org/#company"/> - ... </rdf:Description> - ... </cv:hasWorkHistory> - ... </cv:CV> - ... </rdf:RDF> - ... ''') - >>> - >>> from rdflib.compare import isomorphic - >>> isomorphic(person_graph, expected) #doctest: +SKIP - True -""") - -from contextlib import contextmanager -from rdflib.graph import Graph -from rdflib.namespace import RDF -from rdflib.term import BNode -from rdflib.term import Identifier -from rdflib.term import Literal -from rdflib.term import URIRef -from rdflib.py3compat import format_doctest_out - - -class Describer(object): - - def __init__(self, graph=None, about=None, base=None): - if graph is None: - graph = Graph() - self.graph = graph - self.base = base - self._subjects = [] - self.about(about or None) - - @format_doctest_out - def about(self, subject, **kws): - """ - Sets the current subject. Will convert the given object into an - ``URIRef`` if it's not an ``Identifier``. - - Usage:: - - >>> d = Describer() - >>> d._current() #doctest: +ELLIPSIS - rdflib.term.BNode(...) - >>> d.about("http://example.org/") - >>> d._current() - rdflib.term.URIRef(%(u)s'http://example.org/') - - """ - kws.setdefault('base', self.base) - subject = cast_identifier(subject, **kws) - if self._subjects: - self._subjects[-1] = subject - else: - self._subjects.append(subject) - - @format_doctest_out - def value(self, p, v, **kws): - """ - Set a literal value for the given property. Will cast the value to an - ``Literal`` if a plain literal is given. - - Usage:: - - >>> from rdflib import URIRef - >>> from rdflib.namespace import RDF, RDFS - >>> d = Describer(about="http://example.org/") - >>> d.value(RDFS.label, "Example") - >>> d.graph.value(URIRef('http://example.org/'), RDFS.label) - rdflib.term.Literal(%(u)s'Example') - - """ - v = cast_value(v, **kws) - self.graph.add((self._current(), p, v)) - - @format_doctest_out - def rel(self, p, o=None, **kws): - """Set an object for the given property. Will convert the given object - into an ``URIRef`` if it's not an ``Identifier``. If none is given, a - new ``BNode`` is used. - - Returns a context manager for use in a ``with`` block, within which the - given object is used as current subject. - - Usage:: - - >>> from rdflib import URIRef - >>> from rdflib.namespace import RDF, RDFS - >>> d = Describer(about="/", base="http://example.org/") - >>> _ctxt = d.rel(RDFS.seeAlso, "/about") - >>> d.graph.value(URIRef('http://example.org/'), RDFS.seeAlso) - rdflib.term.URIRef(%(u)s'http://example.org/about') - - >>> with d.rel(RDFS.seeAlso, "/more"): - ... d.value(RDFS.label, "More") - >>> (URIRef('http://example.org/'), RDFS.seeAlso, - ... URIRef('http://example.org/more')) in d.graph - True - >>> d.graph.value(URIRef('http://example.org/more'), RDFS.label) - rdflib.term.Literal(%(u)s'More') - - """ - - kws.setdefault('base', self.base) - p = cast_identifier(p) - o = cast_identifier(o, **kws) - self.graph.add((self._current(), p, o)) - return self._subject_stack(o) - - @format_doctest_out - def rev(self, p, s=None, **kws): - """ - Same as ``rel``, but uses current subject as *object* of the relation. - The given resource is still used as subject in the returned context - manager. - - Usage:: - - >>> from rdflib import URIRef - >>> from rdflib.namespace import RDF, RDFS - >>> d = Describer(about="http://example.org/") - >>> with d.rev(RDFS.seeAlso, "http://example.net/"): - ... d.value(RDFS.label, "Net") - >>> (URIRef('http://example.net/'), RDFS.seeAlso, - ... URIRef('http://example.org/')) in d.graph - True - >>> d.graph.value(URIRef('http://example.net/'), RDFS.label) - rdflib.term.Literal(%(u)s'Net') - - """ - kws.setdefault('base', self.base) - p = cast_identifier(p) - s = cast_identifier(s, **kws) - self.graph.add((s, p, self._current())) - return self._subject_stack(s) - - def rdftype(self, t): - """ - Shorthand for setting rdf:type of the current subject. - - Usage:: - - >>> from rdflib import URIRef - >>> from rdflib.namespace import RDF, RDFS - >>> d = Describer(about="http://example.org/") - >>> d.rdftype(RDFS.Resource) - >>> (URIRef('http://example.org/'), - ... RDF.type, RDFS.Resource) in d.graph - True - - """ - self.graph.add((self._current(), RDF.type, t)) - - def _current(self): - return self._subjects[-1] - - @contextmanager - def _subject_stack(self, subject): - self._subjects.append(subject) - yield None - self._subjects.pop() - - -def cast_value(v, **kws): - if not isinstance(v, Literal): - v = Literal(v, **kws) - return v - - -def cast_identifier(ref, **kws): - ref = ref or BNode() - if not isinstance(ref, Identifier): - ref = URIRef(ref, **kws) - return ref