diff --git a/README.md b/README.md index 50298b0..8de084e 100644 --- a/README.md +++ b/README.md @@ -18,3 +18,20 @@ The following URIs will resolve to the KGCL standard: [Read more here.](https://incatools.github.io/kgcl/) +## How to run project locally +install python 3.9, using mise (optional), get mise from [here](https://mise.jdx.dev/) +```bash +mise install python 3.9 +``` +install poetry +```bash +pip install poetry +``` +install dependencies +```bash +poetry install +``` +run tests +```bash +poetry run pytest +``` diff --git a/src/kgcl_schema/datamodel/kgcl.py b/src/kgcl_schema/datamodel/kgcl.py index 7082b25..f05198d 100644 --- a/src/kgcl_schema/datamodel/kgcl.py +++ b/src/kgcl_schema/datamodel/kgcl.py @@ -309,6 +309,9 @@ class ObjectPropertyCreationId(NodeCreationId): class NodeDeletionId(NodeChangeId): pass +class ClassDeletionId(NodeDeletionId): + pass + class NodeDirectMergeId(NodeObsoletionId): pass @@ -2531,6 +2534,36 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) self.type = str(self.class_name) +@dataclass +class ClassDeletion(NodeDeletion): + """ + A node deletion where the owl type is 'owl:Class' + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = KGCL.ClassDeletion + class_class_curie: ClassVar[str] = "kgcl:ClassDeletion" + class_name: ClassVar[str] = "ClassDeletion" + class_model_uri: ClassVar[URIRef] = KGCL.ClassDeletion + + id: Union[str, ClassDeletionId] = None + superclass: Optional[Union[str, NodeId]] = None + change_description: Optional[str] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, ClassDeletionId): + self.id = ClassDeletionId(self.id) + + if self.superclass is not None and not isinstance(self.superclass, NodeId): + self.superclass = NodeId(self.superclass) + + if self.change_description is not None and not isinstance(self.change_description, str): + self.change_description = str(self.change_description) + + super().__post_init__(**kwargs) + @dataclass(repr=False) class NodeDirectMerge(NodeObsoletion): diff --git a/src/kgcl_schema/schema/kgcl.yaml b/src/kgcl_schema/schema/kgcl.yaml index b5e18fe..dddaa70 100644 --- a/src/kgcl_schema/schema/kgcl.yaml +++ b/src/kgcl_schema/schema/kgcl.yaml @@ -705,6 +705,14 @@ classes: slot_usage: change_description: string_serialization: delete {about_node} + ClassDeletion: + is_a: NodeDeletion + description: A node deletion where the owl type is 'owl:Class' + slots: + - superclass + slot_usage: + change_description: + string_serialization: delete class {about_node} NodeDirectMerge: is_a: NodeObsoletion mixins: