# Term¶

class pronto.Term[source]

A term, corresponding to a node in the ontology graph.

Formally a Term frame is equivalent to an owl: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 existing Ontology instance, using either the create_term or the get_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
Raises

ValueError – when given an invalid synonym type or scope.

Returns

Synonym – A new synonym for the terms. The synonym is already added to the Entity.synonyms collection.

property alternate_ids

A set of alternate IDs for this entity.

Type
property annotations

Annotations relevant to the entity.

Type

frozenset of PropertyValue

property anonymous

Whether or not the entity has an anonymous id.

Semantics of anonymous entities are the same as B-Nodes in RDF.

Type

bool

property builtin

Whether or not the entity is built-in to the OBO format.

pronto uses this tag on the is_a relationship, which is the axiomatic to the OBO language but treated as a relationship in the library.

Type

bool

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 non None comment is semantically equivalent to a rdfs:comment in OWL2. When parsing from OWL, several RDF comments will be merged together into a single comment clause spanning over multiple lines.

Type
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 the annotations attribute of the entity, if any.

Type
property creation_date

the date the entity was created.

Type

datetime or None

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 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

str

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.

Type
property namespace

the namespace this entity is defined in.

Type
property obsolete

whether or not the entity is obsolete.

Type

bool

property subsets

the subsets containing this entity.

Type
property synonyms

a set of synonyms for this entity.

Type
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.

Type
objects(r: pronto.relationship.Relationship) → Iterator[pronto.term.Term][source]

Iterate over the terms t verifying self · 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 account holds_over_chain and transitive_over values of the relationship it is building an iterator with.

superclasses(distance: Optional[int] = None) → Iterator[pronto.term.Term][source]

Get an iterator over the superclasses of this Term.

In order to follow the semantics of rdf:subClassOf, which in turn respects the mathematical inclusion of subset inclusion, is_a is defined as a transitive relationship, hence has_subclass is also transitive by closure property. Therefore self is always yielded first when calling this method.

Parameters

distance (int, optional) – The maximum distance between this node and the yielded superclass (0 for the term itself, 1 for its immediate superclasses, etc.). Use None to explore transitively the entire directed graph.

Yields

Term – Superclasses of the selected term, breadth-first. The first element is always the term itself, use itertools.islice to skip it.

Example

>>> ms = pronto.Ontology.from_obo_library("ms.obo")
>>> sup = 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 terms in the source ontology.

The RDF Schema 1.1 specification, defining the rdfs:subClassOf property, which the is_a relationship is translated to in OWL2 language.

subclasses(distance: Optional[int] = None) → Iterator[pronto.term.Term][source]

Get an iterator over the subclasses of this Term.

Yields

Term – Subclasses of the selected term, breadth-first. The first element is always the term itself, use itertools.islice to skip it.

Example

>>> ms = pronto.Ontology.from_obo_library("ms.obo")
>>> sub = 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')


Note

This method has a runtime of $$O(n^2)$$ where $$n$$ is the number of terms in the source ontology in the worst case. This is due to the fact that OBO and OWL only explicit superclassing relationship, so we have to build the graph of subclasses from the knowledge graph. By caching the graph however, this can be reduced to an $$O(n)$$ operation.

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

property disjoint_from

The terms declared as disjoint from this term.

Two terms are disjoint if they have no instances or subclasses in common.

property intersection_of

The terms or term relationships this term is an intersection of.