Term¶
-
class
pronto.
Term
[source]¶ A term, corresponding to a node in the ontology graph.
Formally a
Term
frame is equivalent to anowl:Class
declaration in OWL2 language. However, some constructs may not be possible to express in both OBO and OWL2.Term
should not be manually instantiated, but obtained from an existingOntology
instance, using either thecreate_term
or theget_term
method.-
__eq__
(other: Any) → bool¶ Return self==value.
-
__ge__
(other)¶ Return self>=value.
-
__gt__
(other)¶ Return self>value.
-
__hash__
()¶ Return hash(self).
-
__le__
(other)¶ Return self<=value.
-
__lt__
(other)¶ Return self<value.
-
__repr__
()¶ Return repr(self).
-
add_synonym
(description: str, scope: Optional[str] = None, type: Optional[pronto.synonym.SynonymType] = None, xrefs: Optional[Iterable[pronto.xref.Xref]] = None) → pronto.synonym.Synonym¶ Add a new synonym to the current entity.
- Parameters
description (
str
) – The alternate definition of the entity, or a related human-readable synonym.scope (
str
orNone
) – An optional synonym scope. Must be either EXACT, RELATED, BROAD or NARROW if given.type (
SynonymType
orNone
) – An optional synonym type. Must be declared in the header of the current ontology.xrefs (iterable of
Xref
, orNone
) – A collections of database cross-references backing the origin of the synonym.
- Raises
ValueError – when given an invalid synonym type or scope.
- Returns
Synonym
– A new synonym for the terms. The synonym is already added to theEntity.synonyms
collection.
-
property
anonymous
¶ Whether or not the entity has an anonymous id.
Semantics of anonymous entities are the same as B-Nodes in RDF.
- Type
-
property
builtin
¶ Whether or not the entity is built-in to the OBO format.
pronto
uses this tag on theis_a
relationship, which is the axiomatic to the OBO language but treated as a relationship in the library.- Type
-
property
comment
¶ A comment about the current entity.
Comments in
comment
clauses are guaranteed to be conserved by OBO parsers and serializers, unlike bang comments. A nonNone
comment
is semantically equivalent to ardfs:comment
in OWL2. When parsing from OWL, several RDF comments will be merged together into a singlecomment
clause spanning over multiple lines.
-
property
created_by
¶ the name of the creator of the entity, if any.
This property gets translated to a
dc:creator
annotation in OWL2, which has very broad semantics. Some OBO ontologies may instead use other annotation properties such as the ones found in Information Interchange Ontology, which can be accessed in theannotations
attribute of the entity, if any.
-
property
definition
¶ the textual definition of the current entity.
Definitions in OBO are intended to be human-readable text describing the entity, with some additional cross-references if possible.
- Type
str
or None
-
property
disjoint_from
¶ The entities declared as disjoint from this entity.
Two entities are disjoint if they have no instances in common. Two entities that are disjoint cannot share any subentities, but the opposite is not always true.
- Type
EntitySet
-
property
equivalent_to
¶ The entities declared as equivalent to this entity.
- Type
EntitySet
-
property
id
¶ The OBO identifier of the entity.
Identifiers can be either prefixed (e.g.
MS:1000031
), unprefixed (e.g.part_of
) or given as plain URLs. Identifiers cannot be edited.- Type
-
property
name
¶ The name of the entity.
Names are formally equivalent to
rdf:label
in OWL2. The OBO format version 1.4 made names optional to improve OWL interoperability, as labels are optional in OWL.
-
property
xrefs
¶ a set of database cross-references.
Xrefs can be used to describe an analogous entity in another vocabulary, such as a database or a semantic knowledge base.
-
objects
(r: pronto.relationship.Relationship) → Iterator[pronto.term.Term][source]¶ Iterate over the terms
t
verifyingself · r · t
.Example
>>> go = pronto.Ontology.from_obo_library("go.obo") >>> go['GO:0048870'] Term('GO:0048870', name='cell motility') >>> list(go['GO:0048870'].objects(go['part_of'])) [Term('GO:0051674', name='localization of cell')]
Todo
Make
Term.objects
take in accountholds_over_chain
andtransitive_over
values of the relationship it is building an iterator with.
-
superclasses
(distance: Optional[int] = None, with_self: bool = True) → pronto.logic.lineage.SuperclassesHandler[source]¶ Get an handle over the superclasses of this
Term
.In order to follow the semantics of
rdf:subClassOf
, which in turn respects the mathematical definition of subset inclusion,is_a
is defined as a reflexive relationship, and so is its inverse relationship.- Parameters
distance (int, optional) – The maximum distance between this term and the yielded superclass (
0
for the term itself,1
for its immediate superclasses, etc.). UseNone
to explore transitively the entire directed graph.with_self (bool) – Whether or not to include the current term in the terms being yielded. RDF semantics state that the
rdfs:subClassOf
property is reflexive, so this is enabled by default, but in most practical cases only the distinct subclasses are desired.
- Yields
Term
– Superclasses of the selected term, breadth-first. The first element is always the term itself, useitertools.islice
to skip it.
Example
>>> ms = pronto.Ontology.from_obo_library("ms.obo") >>> sup = iter(ms['MS:1000143'].superclasses()) >>> next(sup) Term('MS:1000143', name='API 150EX') >>> next(sup) Term('MS:1000121', name='SCIEX instrument model') >>> next(sup) Term('MS:1000031', name='instrument model')
Note
The time complexity for this algorithm is in \(O(n)\), where \(n\) is the number of subclasses of initial term.
See also
The RDF Schema 1.1 specification, defining the
rdfs:subClassOf
property, which theis_a
relationship is translated to in OWL2 language.
-
subclasses
(distance: Optional[int] = None, with_self: bool = True) → pronto.logic.lineage.SubclassesHandler[source]¶ Get an handle over the subclasses of this
Term
.- Parameters
distance (int, optional) – The maximum distance between this term and the yielded subclass (
0
for the term itself,1
for its immediate children, etc.). UseNone
to explore the entire directed graph transitively.with_self (bool) – Whether or not to include the current term in the terms being yielded. RDF semantics state that the
rdfs:subClassOf
property is reflexive, so this is enabled by default, but in most practical cases only the distinct subclasses are desired.
- Yields
Term
– Subclasses of the selected term, breadth-first. The first element is always the term itself, useitertools.islice
to skip it.
Example
>>> ms = pronto.Ontology.from_obo_library("ms.obo") >>> sub = iter(ms['MS:1000031'].subclasses()) >>> next(sub) Term('MS:1000031', name='instrument model') >>> next(sub) Term('MS:1000121', name='SCIEX instrument model') >>> next(sub) Term('MS:1000122', name='Bruker Daltonics instrument model')
Hint
Use the
to_set
method of the returned iterator to efficiently collect all subclasses into aTermSet
.Note
This method has a runtime that is \(O(n)\) where \(n\) is the number of subclasses of the initial term. While OBO and OWL only explicit the superclassing relationship (equivalent to the
rdfs:subClassOf
property in RDF), we can build a cache that stores the edges of the resulting knowledge graph in an index accessible by both endpoints of each edge.
-
is_leaf
() → bool[source]¶ Check whether the term is a leaf in the ontology.
We define leaves as nodes in the ontology which do not have subclasses since the subclassing relationship is directed and can be used to create a DAG of all the terms in the ontology.
Example
>>> ms = pronto.Ontology.from_obo_library("ms.obo") >>> ms['MS:1000031'].is_leaf() # instrument model False >>> ms['MS:1001792'].is_leaf() # Xevo TQ-S True
Note
This method has a runtime of \(O(1)\) as
Ontology
objects internally cache the subclasses of each term.
-