Changeset 117

Show
Ignore:
Timestamp:
04/09/08 23:08:05 (4 years ago)
Author:
phil
Message:

Added transitive_objects and transitive_subjects to SPARQLGraph

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • rdfalchemy/trunk/rdfalchemy/sparql.py

    r109 r117  
    231231                yield item 
    232232            list = self.value(list, RDF.rest) 
     233             
     234    def transitive_objects(self, subject, property, remember=None): 
     235       """Transitively generate objects for the `property` relationship 
     236 
     237       Generated objects belong to the depth first transitive closure of the 
     238       `property` relationship starting at `subject`. 
     239       """ 
     240       if remember is None: 
     241           remember = {} 
     242       if subject in remember: 
     243           return 
     244       remember[subject] = 1 
     245       yield subject 
     246       for object in self.objects(subject, property): 
     247           for o in self.transitive_objects(object, property, remember): 
     248               yield o 
     249               
     250    def transitive_subjects(self, predicate, object, remember=None): 
     251        """Transitively generate objects for the `property` relationship 
     252 
     253        Generated objects belong to the depth first transitive closure of the 
     254        `property` relationship starting at `subject`. 
     255        """ 
     256        if remember is None: 
     257            remember = {} 
     258        if object in remember: 
     259            return 
     260        remember[object] = 1 
     261        yield object 
     262        for subject in self.subjects(predicate, object): 
     263            for s in self.transitive_subjects(predicate, subject, remember): 
     264                yield s 
    233265            
    234266    def qname(self,uri):