예제 #1
0
파일: controller.py 프로젝트: rrasmo/rdfcli
class Controller:

    def __init__(self):
        self.current = None #URIRef
        self.history = History()

    def set_model(self, model):
        self.model = model

    def load(self, source):
        """Load triples in graph from source."""
        return self.model.load(source)

    def size(self):
        """Return number of triples in graph."""
        return self.model.size()

    def ls(self, uri):
        """Return objects of current if predicate given, return current predicates-objects if no uri is given."""
        if uri:
            ref = self.model.to_uriref(uri)
            if ref and self.current:
                return self.model.get_objects(self.current, ref)
        elif self.current:
            return self.model.get_properties(self.current)
        return None

    def is_(self, uri):
        """Return subjects of current if predicate given, return current subjects-predicates if no uri is given."""
        if uri:
            ref = self.model.to_uriref(uri)
            if ref and self.current:
                return self.model.get_subjects(ref, self.current)
        elif self.current:
            return self.model.get_reverse_properties(self.current)
        return None

    def go(self, uri):
        """Set current to given resource uri, or to None if no uri is given."""
        if uri:
            ref = self.model.to_uriref(uri)
            self.model.load(str(ref))
            if self.model.contains_resource(ref):
                self.current = ref
                self.history.push(ref)
                return ref
            return False
        else:
            self.current = None
            self.history.push(None)
            return None

    def get_objects(self, uri):
        if uri:
            ref = self.model.to_uriref(uri)
            if ref and self.current:
                return self.model.get_resource_objects(self.current, ref)
            return False
        else:
            return False

    def fw(self, uri, index=0):
        """Set current to object of given predicate of current."""
        if uri:
            ref = self.model.to_uriref(uri)
            if ref and self.current:
                objs = self.model.get_resource_objects(self.current, ref)
                if len(objs) > 0:
                    obj = objs[index]
                    self.model.load(str(obj))
                    self.current = obj
                    self.history.push(obj)
                    return obj
            return False
        else:
            return False

    def get_subjects(self, uri):
        if uri:
            ref = self.model.to_uriref(uri)
            if ref and self.current:
                return self.model.get_subjects(ref, self.current)
            return False
        else:
            return False

    def bw(self, uri, index=0):
        """Set current to subject of given predicate pointing to current."""
        if uri:
            ref = self.model.to_uriref(uri)
            if ref and self.current:
                subjs = self.model.get_subjects(ref, self.current)
                if len(subjs) > 0:
                    subj = subjs[index]
                    self.model.load(str(subj))
                    self.current = subj
                    self.history.push(subj)
                    return subj
            return False
        else:
            return False

    def forward(self):
        ref = self.history.forward()
        if ref != False:
            self.current = ref
        return ref

    def back(self):
        ref = self.history.back()
        if ref != False:
            self.current = ref
        return ref

    def this(self):
        """Return current."""
        return self.current

    def pred(self):
        """Return predicates of current."""
        return self.model.pred(self.current)

    def types(self):
        """Return all terms that exist as objects of rdf:type."""
        return self.model.types()

    def norm(self, ref):
        return self.model.norm(ref)