-
Notifications
You must be signed in to change notification settings - Fork 14
First version of added namespace search in get_by_label #838
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from all commits
768118c
bcafad0
79acb31
dd99912
3390620
d5a6ea5
00e8d9a
3aadfee
6782a73
652951a
d5ab563
04b46f9
46926c6
64d0f8d
0b96a02
172af04
5f4b4ec
f106279
861a348
5d47dde
8a13a0d
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -312,33 +312,42 @@ def get_by_label( | |
| *, | ||
| label_annotations: str = None, | ||
| prefix: str = None, | ||
| namespace: str = None, | ||
| imported: bool = True, | ||
| colon_in_label: bool = None, | ||
| ): | ||
| """Returns entity with label annotation `label`. | ||
|
|
||
| Arguments: | ||
| label: label so search for. | ||
| May be written as 'label' or 'prefix:label'. | ||
| get_by_label('prefix:label') == | ||
| get_by_label('label', prefix='prefix'). | ||
| label_annotations: a sequence of label annotation names to look up. | ||
| Defaults to the `label_annotations` property. | ||
| prefix: if provided, it should be the last component of | ||
| the base iri of an ontology (with trailing slash (/) or hash | ||
| (#) stripped off). The search for a matching label will be | ||
| limited to this namespace. | ||
| imported: Whether to also look for `label` in imported ontologies. | ||
| colon_in_label: Whether to accept colon (:) in a label or name-part | ||
| of IRI. Defaults to the `colon_in_label` property of `self`. | ||
| Setting this true cannot be combined with `prefix`. | ||
| label: label so search for. | ||
| May be written as 'label' or 'prefix:label' | ||
| get_by_label('prefix:label') is equivalent to | ||
| searching for both | ||
| get_by_label('label', prefix='prefix') and | ||
| get_by_label('label', namespace='prefix') | ||
| label_annotations: a sequence of label annotation names to look up. | ||
| Defaults to the `label_annotations` property. | ||
| prefix: if provided, it should be the last component of | ||
| the base iri of an ontology (with trailing slash (/) or hash | ||
| (#) stripped off). The search for a matching label will be | ||
| limited to this ontology. `prefix` is ignored if `namespace` | ||
| is provided. | ||
| namespace: if provided, it should be the namespace of the entity. | ||
| It can be provided either as the whole namespace or only as the | ||
| last 'word' in the namespace, i.e. what is defined as the | ||
| namespace.name. `namespace` takes precedence over `prefix`. | ||
| imported: Whether to also look for `label` in imported ontologies. | ||
| colon_in_label: Whether to accept colon (:) in a label or name-part | ||
| of IRI. Defaults to the `colon_in_label` property of `self`. | ||
| Setting this true cannot be combined with `prefix`. | ||
|
|
||
| If several entities have the same label, only the one which is | ||
| found first is returned.Use get_by_label_all() to get all matches. | ||
|
|
||
| Note, if different prefixes are provided in the label and via | ||
| the `prefix` argument a warning will be issued and the | ||
| `prefix` argument will take precedence. | ||
| Note, if namespace is provided directly in the first argument as | ||
| 'namespace:label' it will be used as namespace and | ||
| any value given to the `namespace` argument will be | ||
| ignored. | ||
|
|
||
| A NoSuchLabelError is raised if `label` cannot be found. | ||
| """ | ||
|
|
@@ -353,23 +362,35 @@ def get_by_label( | |
|
|
||
| if colon_in_label is None: | ||
| colon_in_label = self._colon_in_label | ||
| if colon_in_label: | ||
| if prefix: | ||
| raise ValueError( | ||
| "`prefix` cannot be combined with `colon_in_label`" | ||
| if colon_in_label and prefix: | ||
| raise ValueError( | ||
| "`prefix` cannot be combined with `colon_in_label`" | ||
| ) | ||
|
|
||
| splitlabel = label.split(":", 1) | ||
| if len(splitlabel) == 2 and not splitlabel[1].startswith("//"): | ||
francescalb marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| label = splitlabel[1] | ||
| if namespace and namespace != splitlabel[0]: | ||
| warnings.warn( | ||
| f"Namespace given both as argument ({namespace}) " | ||
| f"and in label as ({splitlabel[0]}). " | ||
| "Namespace given in argument is ignored. " | ||
| ) | ||
| else: | ||
| splitlabel = label.split(":", 1) | ||
| if len(splitlabel) == 2 and not splitlabel[1].startswith("//"): | ||
| label = splitlabel[1] | ||
| if prefix and prefix != splitlabel[0]: | ||
| warnings.warn( | ||
| f"Prefix given both as argument ({prefix}) " | ||
| f"and in label ({splitlabel[0]}). " | ||
| "Prefix given in argument takes precedence. " | ||
| ) | ||
| if not prefix: | ||
| prefix = splitlabel[0] | ||
| namespace = splitlabel[0] | ||
| #print('namespace', namespace) | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. can be removed |
||
| if namespace: | ||
| #print('in get_by_label namespavce') | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. can be removed |
||
| entityset = self.get_by_label_all( | ||
francescalb marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| label, | ||
| label_annotations=label_annotations, | ||
| namespace=namespace, | ||
| ) | ||
| if len(entityset) == 1: | ||
| return entityset.pop() | ||
| raise NoSuchLabelError( | ||
| f"No label annotations matches for '{label}' " | ||
| f"with namespace '{namespace}'." | ||
| ) | ||
|
|
||
| if prefix: | ||
| entityset = self.get_by_label_all( | ||
|
|
@@ -379,11 +400,6 @@ def get_by_label( | |
| ) | ||
| if len(entityset) == 1: | ||
| return entityset.pop() | ||
| if len(entityset) > 1: | ||
| raise AmbiguousLabelError( | ||
| f"Several entities have the same label '{label}' " | ||
| f"with prefix '{prefix}'." | ||
| ) | ||
| raise NoSuchLabelError( | ||
| f"No label annotations matches for '{label}' " | ||
| f"with prefix '{prefix}'." | ||
|
|
@@ -425,24 +441,30 @@ def get_by_label_all( | |
| label, | ||
| label_annotations=None, | ||
| prefix=None, | ||
| namespace=None, | ||
| exact_match=False, | ||
| ) -> "Set[Optional[owlready2.entity.EntityClass]]": | ||
| """Returns set of entities with label annotation `label`. | ||
|
|
||
| Arguments: | ||
| label: label so search for. | ||
| May be written as 'label' or 'prefix:label'. Wildcard matching | ||
| using glob pattern is also supported if `exact_match` is set to | ||
| false. | ||
| label_annotations: a sequence of label annotation names to look up. | ||
| Defaults to the `label_annotations` property. | ||
| prefix: if provided, it should be the last component of | ||
| the base iri of an ontology (with trailing slash (/) or hash | ||
| (#) stripped off). The search for a matching label will be | ||
| limited to this namespace. | ||
| exact_match: Do not treat "*" and brackets as special characters | ||
| when matching. May be useful if your ontology has labels | ||
| containing such labels. | ||
| label: label so search for. | ||
francescalb marked this conversation as resolved.
Show resolved
Hide resolved
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. looks like an extra indentation |
||
| May be written as 'label' or 'prefix:label'. Wildcard matching | ||
| using glob pattern is also supported if `exact_match` is set to | ||
| false. | ||
| label_annotations: a sequence of label annotation names to look up. | ||
| Defaults to the `label_annotations` property. | ||
| prefix: if provided, it should be the last component of | ||
| the base iri of an ontology (with trailing slash (/) or hash | ||
| (#) stripped off). The search for a matching label will be | ||
| limited to this ontology. `prefix` is ignored if `namespace` | ||
| is provided. | ||
| namespace: if provided, it should be the namespace of the entity. | ||
| It can be provided either as the whole namespace or only as the | ||
| last 'word' in the namespace, i.e. what is defined as the | ||
| namespace.name. `namespace` takes precedence over `prefix`. | ||
| exact_match: Do not treat "*" and brackets as special characters | ||
| when matching. May be useful if your ontology has labels | ||
| containing such labels. | ||
|
|
||
| Returns: | ||
| Set of all matching entities or an empty set if no matches | ||
|
|
@@ -496,13 +518,27 @@ def get_by_label_all( | |
| entities.update( | ||
| ent for ent in self.get_entities() if ent.name in matches | ||
| ) | ||
| if namespace: | ||
| #print("in namespace", namespace) | ||
| #print("entities", entities) | ||
| #for ent in entities: | ||
| # print("ent.namespace", ent.namespace) | ||
| # print("ent.namespace.name", ent.namespace.name) | ||
| # print("namespace", namespace) | ||
| # print(namespace in [ent.namespace.name, ent.namespace.base_iri]) | ||
|
Comment on lines
+522
to
+528
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. can be removed |
||
| return set( | ||
| ent | ||
| for ent in entities | ||
| if namespace in [ent.namespace.name, ent.namespace._base_iri] | ||
| ) | ||
|
|
||
| if prefix: | ||
| return set( | ||
| ent | ||
| for ent in entities | ||
| if ent.namespace.ontology.prefix == prefix | ||
| ) | ||
|
|
||
| return entities | ||
|
|
||
| def _to_storids(self, sequence, create_if_missing=False): | ||
|
|
||
Uh oh!
There was an error while loading. Please reload this page.