pymantic
Advanced tools
+1
-1
| Metadata-Version: 2.1 | ||
| Name: pymantic | ||
| Version: 0.2.2 | ||
| Version: 0.2.3 | ||
| Summary: Semantic Web and RDF library for Python | ||
@@ -5,0 +5,0 @@ Home-page: https://github.com/norcalrdf/pymantic/ |
| Metadata-Version: 2.1 | ||
| Name: pymantic | ||
| Version: 0.2.2 | ||
| Version: 0.2.3 | ||
| Summary: Semantic Web and RDF library for Python | ||
@@ -5,0 +5,0 @@ Home-page: https://github.com/norcalrdf/pymantic/ |
| # | ||
| version = '0.2.2' | ||
| version = '0.2.3' | ||
| release = version |
+21
-15
@@ -416,25 +416,31 @@ __all__ = ['Triple', 'Quad', 'q_as_t', 't_as_q', 'Literal', 'NamedNode', | ||
| else: # s, p, ?var | ||
| for triple in itervalues(self._spo[subject][predicate]): | ||
| yield triple | ||
| if subject in self._spo and predicate in self._spo[subject]: | ||
| for triple in itervalues(self._spo[subject][predicate]): | ||
| yield triple | ||
| else: # s, ?var, ??? | ||
| if object: # s, ?var, o | ||
| for triple in itervalues(self._osp[object][subject]): | ||
| yield triple | ||
| if object in self._osp and subject in self._osp[object]: | ||
| for triple in itervalues(self._osp[object][subject]): | ||
| yield triple | ||
| else: # s, ?var, ?var | ||
| for predicate in self._spo[subject]: | ||
| for triple in \ | ||
| itervalues(self._spo[subject][predicate]): | ||
| yield triple | ||
| if subject in self._spo: | ||
| for predicate in self._spo[subject]: | ||
| for triple in \ | ||
| itervalues(self._spo[subject][predicate]): | ||
| yield triple | ||
| elif predicate: # ?var, p, ??? | ||
| if object: # ?var, p, o | ||
| for triple in itervalues(self._pos[predicate][object]): | ||
| yield triple | ||
| else: # ?var, p, ?var | ||
| for object in self._pos[predicate]: | ||
| if predicate in self._pos and object in self._pos[predicate]: | ||
| for triple in itervalues(self._pos[predicate][object]): | ||
| yield triple | ||
| else: # ?var, p, ?var | ||
| if predicate in self._pos: | ||
| for object in self._pos[predicate]: | ||
| for triple in itervalues(self._pos[predicate][object]): | ||
| yield triple | ||
| elif object: # ?var, ?var, o | ||
| for subject in self._osp[object]: | ||
| for triple in itervalues(self._osp[object][subject]): | ||
| yield triple | ||
| if object in self._osp: | ||
| for subject in self._osp[object]: | ||
| for triple in itervalues(self._osp[object][subject]): | ||
| yield triple | ||
| else: | ||
@@ -441,0 +447,0 @@ for triple in self._triples: |
@@ -64,8 +64,13 @@ from collections import OrderedDict | ||
| def turtle_repr(node, profile, name_map, bnode_name_maker): | ||
| def turtle_repr(node, profile, name_map, bnode_name_maker, base=None): | ||
| """Turn a node in an RDF graph into its turtle representation.""" | ||
| if node.interfaceName == 'NamedNode': | ||
| name = profile.prefixes.shrink(node) | ||
| if base and name.startswith(base): | ||
| if base.endswith("#"): | ||
| name = '<' + text_type(name.replace(base, "#")) + '>' | ||
| else: | ||
| name = '<' + text_type(name.replace(base, "")) + '>' | ||
| if name == node: | ||
| name = '<' + text_type(node) + '>' | ||
| name = '<' + text_type(name) + '>' | ||
| else: | ||
@@ -125,3 +130,3 @@ escape_prefix_local(name) | ||
| name_maker = lambda n: turtle_repr(n, profile, name_map, bnode_name_maker) | ||
| name_maker = lambda n: turtle_repr(n, profile, name_map, bnode_name_maker, base) | ||
@@ -128,0 +133,0 @@ from pymantic.rdf import List |
@@ -88,2 +88,21 @@ from unittest import TestCase | ||
| def test_named_node_with_hash_base(self): | ||
| node = self.primitives.NamedNode('https://example.com/foo#bar') | ||
| name = self.turtle_repr(node = node, profile = self.profile, name_map = None, bnode_name_maker = None, | ||
| base='https://example.com/foo#') | ||
| self.assertEqual(name, '<#bar>') | ||
| def test_named_node_with_path_base(self): | ||
| node = self.primitives.NamedNode('https://example.com/foo') | ||
| name = self.turtle_repr(node = node, profile = self.profile, name_map = None, bnode_name_maker = None, | ||
| base='https://example.com/') | ||
| self.assertEqual(name, '<foo>') | ||
| def test_named_node_with_multi_path_base(self): | ||
| node = self.primitives.NamedNode('https://example.com/foo/bar') | ||
| name = self.turtle_repr(node = node, profile = self.profile, name_map = None, bnode_name_maker = None, | ||
| base='https://example.com/') | ||
| self.assertEqual(name, '<foo/bar>') | ||
| class TestTurtleSerializer(TestCase): | ||
@@ -129,2 +148,66 @@ def setUp(self): | ||
| def testBaseSerialization(self): | ||
| basic_turtle = """@prefix dc: <http://purl.org/dc/terms/> . | ||
| @prefix example: <http://example.com/> . | ||
| example:foo dc:title "Foo" . | ||
| example:bar dc:title "Bar" . | ||
| example:baz dc:subject example:foo .""" | ||
| graph = self.turtle_parser.parse(basic_turtle) | ||
| f = cStringIO() | ||
| self.profile.setPrefix('dc', self.primitives.NamedNode('http://purl.org/dc/terms/')) | ||
| self.serialize_turtle( | ||
| graph = graph, f = f, profile = self.profile, | ||
| base = 'http://example.com/', | ||
| ) | ||
| f.seek(0) | ||
| graph2 = self.turtle_parser.parse(f.read()) | ||
| f.seek(0) | ||
| self.assertEqual(f.read().strip(), """@base <http://example.com/> . | ||
| @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . | ||
| @prefix dc: <http://purl.org/dc/terms/> . | ||
| <bar> dc:title "Bar" ; | ||
| . | ||
| <baz> dc:subject <foo> ; | ||
| . | ||
| <foo> dc:title "Foo" ; | ||
| . | ||
| """.strip()) | ||
| def testBaseAndPrefixSerialization(self): | ||
| basic_turtle = """@prefix dc: <http://purl.org/dc/terms/> . | ||
| @prefix example: <http://example.com/> . | ||
| example:foo dc:title "Foo" . | ||
| example:bar dc:title "Bar" . | ||
| example:baz dc:subject example:foo .""" | ||
| graph = self.turtle_parser.parse(basic_turtle) | ||
| f = cStringIO() | ||
| self.profile.setPrefix('ex', self.primitives.NamedNode('http://example.com/')) | ||
| self.profile.setPrefix('dc', self.primitives.NamedNode('http://purl.org/dc/terms/')) | ||
| self.serialize_turtle( | ||
| graph = graph, f = f, profile = self.profile, | ||
| base = 'http://example.com/', | ||
| ) | ||
| f.seek(0) | ||
| graph2 = self.turtle_parser.parse(f.read()) | ||
| f.seek(0) | ||
| self.assertEqual(f.read().strip(), """@base <http://example.com/> . | ||
| @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . | ||
| @prefix ex: <http://example.com/> . | ||
| @prefix dc: <http://purl.org/dc/terms/> . | ||
| ex:bar dc:title "Bar" ; | ||
| . | ||
| ex:baz dc:subject ex:foo ; | ||
| . | ||
| ex:foo dc:title "Foo" ; | ||
| . | ||
| """.strip()) | ||
| def testMultiplePredicates(self): | ||
@@ -131,0 +214,0 @@ basic_turtle = """@prefix dc: <http://purl.org/dc/terms/> . |
Alert delta unavailable
Currently unable to show alert delta for PyPI packages.
220278
1.73%4539
1.79%