diff options
author | Gunnar Aastrand Grimnes <gromgull@gmail.com> | 2015-11-22 10:08:22 +0100 |
---|---|---|
committer | Gunnar Aastrand Grimnes <gromgull@gmail.com> | 2015-11-22 18:01:40 +0100 |
commit | bccc76132a7ca19cfa979026e2d5f9ecd8ca6dcf (patch) | |
tree | feb96f36f8cedaa78596a162193000f0a94f696a | |
parent | ea043ead8fd51acca7d2d3f4562aab7b05b2baa1 (diff) | |
download | rdflib-closednamedspace-inheritance-fix.tar.gz |
Made ClosedNamespace (and _RDFNamespace) inherit from Namespaceclosednamedspace-inheritance-fix
This fixes #542
-rw-r--r-- | rdflib/namespace.py | 40 |
1 files changed, 20 insertions, 20 deletions
diff --git a/rdflib/namespace.py b/rdflib/namespace.py index 57ca9749..d98b28be 100644 --- a/rdflib/namespace.py +++ b/rdflib/namespace.py @@ -95,11 +95,6 @@ class Namespace(unicode): rt = unicode.__new__(cls, value, 'utf-8') return rt - - @property - def title(self): - return URIRef(self + 'title') - def term(self, name): # need to handle slices explicitly because of __getitem__ override return URIRef(self + (name if isinstance(name, basestring) else '')) @@ -148,27 +143,34 @@ class URIPattern(unicode): -class ClosedNamespace(object): +class ClosedNamespace(Namespace): """ A namespace with a closed list of members Trying to create terms not listen is an error """ - def __init__(self, uri, terms): - self.uri = uri - self.__uris = {} + def __new__(cls, uri, terms): + rt = Namespace.__new__(cls, uri) + + rt.__uris = {} for t in terms: - self.__uris[t] = URIRef(self.uri + t) + rt.__uris[t] = URIRef(rt + t) + + return rt def term(self, name): uri = self.__uris.get(name) if uri is None: raise Exception( - "term '%s' not in namespace '%s'" % (name, self.uri)) + "term '%s' not in namespace '%s'" % (name, self)) else: return uri + @property + def uri(self): # support legacy code from before ClosedNamespace extended unicode + return self + def __getitem__(self, key, default=None): return self.term(key) @@ -178,21 +180,18 @@ class ClosedNamespace(object): else: return self.term(name) - def __str__(self): - return str(self.uri) - def __repr__(self): - return """rdf.namespace.ClosedNamespace('%s')""" % str(self.uri) + return """rdf.namespace.ClosedNamespace('%s')""" % self class _RDFNamespace(ClosedNamespace): """ Closed namespace for RDF terms """ - def __init__(self): - super(_RDFNamespace, self).__init__( - URIRef("http://www.w3.org/1999/02/22-rdf-syntax-ns#"), - terms=[ + + def __new__(cls): + return ClosedNamespace.__new__(cls, "http://www.w3.org/1999/02/22-rdf-syntax-ns#", + terms=[ # Syntax Names "RDF", "Description", "ID", "about", "parseType", "resource", "li", "nodeID", "datatype", @@ -213,10 +212,11 @@ class _RDFNamespace(ClosedNamespace): "XMLLiteral", "HTML", "langString"] ) + def term(self, name): try: i = int(name) - return URIRef("%s_%s" % (self.uri, i)) + return URIRef("%s_%s" % (self, i)) except ValueError: return super(_RDFNamespace, self).term(name) |