diff options
author | Jaimie Murdock <jmmurdo@sandia.gov> | 2021-01-28 12:48:03 -0700 |
---|---|---|
committer | Jaimie Murdock <jmmurdo@sandia.gov> | 2021-01-28 12:48:03 -0700 |
commit | c85cf9d6f78a6554e226620c095b6759073ac04d (patch) | |
tree | eb2f244ee2811d059281a4fdfc3314dd36f91a4b | |
parent | cc340ede60b9ad445c6e68cdd21208fd09b8da27 (diff) | |
download | rdflib-c85cf9d6f78a6554e226620c095b6759073ac04d.tar.gz |
adding {ClosedNamespace,NamespaceManager,_RDFNamespace}.__contains__() and tests
-rw-r--r-- | rdflib/namespace.py | 21 | ||||
-rw-r--r-- | test/test_namespace.py | 18 |
2 files changed, 32 insertions, 7 deletions
diff --git a/rdflib/namespace.py b/rdflib/namespace.py index 4a4d0cfe..993d82a4 100644 --- a/rdflib/namespace.py +++ b/rdflib/namespace.py @@ -146,8 +146,8 @@ class Namespace(str): def __repr__(self): return "Namespace(%r)" % str(self) - def __contains__(self, other): - return other.startswith(self) # test namespace membership with "ref in ns" syntax + def __contains__(self, ref): + return ref.startswith(self) # test namespace membership with "ref in ns" syntax class URIPattern(str): @@ -194,11 +194,10 @@ class ClosedNamespace(object): self.__uris[t] = URIRef(self.uri + t) def term(self, name): - uri = self.__uris.get(name) - if uri is None: + if name not in self.__uris: raise KeyError("term '{}' not in namespace '{}'".format(name, self.uri)) else: - return uri + return self.__uris[name] def __getitem__(self, key, default=None): return self.term(key) @@ -220,9 +219,12 @@ class ClosedNamespace(object): def __dir__(self): return list(self._ClosedNamespace__uris) + + def __contains__(self, ref): + return ref in self.__uris.values() # test namespace membership with "ref in ns" syntax def _ipython_key_completions_(self): - return dir(self) + return dir(self.uri) class _RDFNamespace(ClosedNamespace): @@ -597,6 +599,13 @@ class NamespaceManager(object): self.bind("rdfs", RDFS) self.bind("xsd", XSD) + def __contians__(self, ref): + # checks if a reference is in any of the managed namespaces with syntax + # "ref in manager". Note that we don't use "ref in ns", as + # NamespaceManager.namespaces() returns Iterator[Tuple[str, URIRef]] + # rather than Iterator[Tuple[str, Namespace]] + return any(ref.startswith(ns) for prefix, ns in self.namespaces()) + def reset(self): self.__cache = {} self.__strie = {} diff --git a/test/test_namespace.py b/test/test_namespace.py index 2706467f..7d9b04fe 100644 --- a/test/test_namespace.py +++ b/test/test_namespace.py @@ -1,7 +1,8 @@ +from rdflib.rdflib.namespace import Namespace import unittest from rdflib.graph import Graph -from rdflib.namespace import FOAF +from rdflib.namespace import FOAF, RDF, RDFS, SH from rdflib.term import URIRef @@ -112,3 +113,18 @@ class NamespacePrefixTest(unittest.TestCase): add_not_in_namespace("givenName"), URIRef("http://xmlns.com/foaf/0.1/givenName"), ) + + def test_contains_method(self): + """Tests for Namespace.__contains__() methods.""" + + ref = URIRef('http://www.w3.org/ns/shacl#example') + self.assertTrue(type(SH) == Namespace, "SH no longer a Namespace, update test.") + self.assertTrue(ref in SH, "sh:example not in SH") + + ref = URIRef('http://www.w3.org/2000/01/rdf-schema#label') + self.assertTrue(ref in RDFS, "ClosedNamespace(RDFS) does not include rdfs:label") + ref = URIRef('http://www.w3.org/2000/01/rdf-schema#example') + self.assertFalse(ref in RDFS, "ClosedNamespace(RDFS) includes out-of-ns member rdfs:example") + + ref = URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type') + self.assertTrue(ref in RDF, "_RDFNamespace does not include rdf:type")
\ No newline at end of file |