diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..077972a --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,38 @@ +name: CI + +on: + push: + branches: ['main'] + paths: + - dev_scripts/** + pull_request: + branches: [ 'main' ] + paths: + - dev_scripts/** + +jobs: + Precommit: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ['3.10'] + + defaults: + run: + working-directory: ./dev_scripts + + steps: + - uses: actions/checkout@master + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + + - name: Install dependencies + run: | + python3 -m pip install --upgrade pip + pip3 install -e .[dev] + + - name: Run precommit.py + run: python3 precommit.py diff --git a/.gitignore b/.gitignore index 82f9275..db6288e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.idea/ # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..e6d334b --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,109 @@ +# Contributing + +## Issues + +Please report bugs or feature requests by [creating GitHub issues]. + +[creating GitHub issues]: https://github.com/aas-core-works/aas-core-protobuf/issues + +## In Code + +If you want to contribute in code, pull requests are welcome! + +Please do [create a new issue] before you dive into coding. +It can well be that we already started working on the feature, or that there are upstream or downstream complexities involved which you might not be aware of. + +[create a new issue]: https://github.com/aas-core-works/aas-core-protobuf/issues + +## Definition Generation + +All the generation logic lives in [dev_scripts/](dev_scripts/) (short for "development scripts"). +Dev. scripts are a Python project. + +To install the dev. scripts, create a virtual environment: + +``` +python3 -m venv venv +``` + +Activate it (on Linux): + +``` +source venv/bin/activate +``` + +Or on Windows: + +``` +venv/bin/Scripts/activate +``` + +Once in a virtual environment, install the dependencies to run the generation: + +``` +cd dev_scripts +pip3 install -e . +``` + +Run the definition generation: + +``` +python dev_scripts/aas_core_protobuf_generation/main.py +``` + +If you want to propagate the changes from aas-core-meta or aas-core-codegen, update the dependencies in [dev_scripts/pyproject.toml](dev_scripts/pyproject.toml). + +### Development + +Install a couple of development dependencies (*e.g.*, tools for static code analysis): + +``` +pip3 install -e .[dev] +``` + +Make changes to the code. + +Run the precommit checks: + +``` +python dev_scripts/precommit.py +``` + +If you want to automatically re-format: + +``` +python dev_scripts/precommit.py --overwrite +``` + +### Pull Requests + +**Feature branches**. +We develop using the feature branches, see [this section of the Git book]. + +[this section of the Git book]: https://git-scm.com/book/en/v2/Git-Branching-Branching-Workflows + +If you are a member of the development team, create a feature branch directly within the repository. + +Otherwise, if you are a non-member contributor, fork the repository and create the feature branch in your forked repository. +See [this GitHub tutorial] for more guidance. + +[this GitHub tutorial]: https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request-from-a-fork + +**Branch Prefix**. +Please prefix the branch with your Github user name (*e.g.,* ``mristin/Add-some-feature``). + +**Continuous Integration**. +GitHub will run the continuous integration (CI) automatically through GitHub actions. +The CI includes running the tests, inspecting the code, re-building the documentation *etc.* + +### Commit Messages + +The commit messages follow the guidelines from https://chris.beams.io/posts/git-commit: + +* Separate subject from body with a blank line, +* Limit the subject line to 50 characters, +* Capitalize the subject line, +* Do not end the subject line with a period, +* Use the imperative mood in the subject line, +* Wrap the body at 72 characters, and +* Use the body to explain *what* and *why* (instead of *how*). diff --git a/README.md b/README.md index 831ea43..a5e2d3a 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,8 @@ # aas-core-protobuf + Provide Protocol Buffer definitions for AAS meta-models. + +We put the definitions in the directories corresponding to the meta-model version: +* [v3/](v3/) + +If you want to contribute (*e.g.*, update or re-generate the definitions), please see [CONTRIBUTING.md](CONTRIBUTING.md). diff --git a/dev_scripts/aas_core_protobuf_generation/__init__.py b/dev_scripts/aas_core_protobuf_generation/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dev_scripts/aas_core_protobuf_generation/main.py b/dev_scripts/aas_core_protobuf_generation/main.py new file mode 100644 index 0000000..ed48eed --- /dev/null +++ b/dev_scripts/aas_core_protobuf_generation/main.py @@ -0,0 +1,51 @@ +"""Generate the Protobuf definitions for AAS meta-models.""" + +import argparse +import os +import pathlib +import sys + +import aas_core_codegen.main +import aas_core_meta.v3 + + +def module_basename(name: str) -> str: + """ + Extract the last name in a qualified module name. + + >>> module_basename("aas_core_meta.v3") + 'v3' + """ + return name.split(".")[-1] + + +def main() -> int: + """Execute the main routine.""" + parser = argparse.ArgumentParser(description=__doc__) + parser.parse_args() + + this_path = pathlib.Path(os.path.realpath(__file__)) + + for meta_model in [aas_core_meta.v3]: + assert meta_model.__file__ is not None + model_path = pathlib.Path(meta_model.__file__) + meta_model_basename = module_basename(meta_model.__name__) + + print(f"Generating the definitions for meta-model: {meta_model_basename}") + + codegen_params = aas_core_codegen.main.Parameters( + model_path=model_path, + target=aas_core_codegen.main.Target.PROTOBUF, + snippets_dir=this_path.parent.parent / "snippets" / meta_model_basename, + output_dir=this_path.parent.parent.parent / meta_model_basename, + ) + + aas_core_codegen.main.execute( + params=codegen_params, stdout=sys.stdout, stderr=sys.stderr + ) + + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/dev_scripts/precommit.py b/dev_scripts/precommit.py new file mode 100644 index 0000000..616d0bb --- /dev/null +++ b/dev_scripts/precommit.py @@ -0,0 +1,44 @@ +"""Run the pre-commit on all the files.""" + +import argparse +import os +import pathlib +import subprocess +import sys + + +def main() -> int: + """Execute the main routine.""" + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument( + "--overwrite", help="Auto-heal, where possible", action="store_true" + ) + args = parser.parse_args() + + overwrite = bool(args.overwrite) + + this_path = pathlib.Path(os.path.realpath(__file__)) + + python_files = [ + str(pth) + for pth in ( + sorted((this_path.parent / "aas_core_protobuf_generation").glob("*.py")) + + [this_path.parent / "precommit.py"] + ) + ] + + subprocess.check_call( + ["black", "--check"] + python_files + if not overwrite + else ["black"] + python_files + ) + + subprocess.check_call(["mypy"] + python_files) + + subprocess.check_call(["pylint"] + python_files) + + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/dev_scripts/pyproject.toml b/dev_scripts/pyproject.toml new file mode 100644 index 0000000..571cf59 --- /dev/null +++ b/dev_scripts/pyproject.toml @@ -0,0 +1,48 @@ +[build-system] +requires = ["setuptools"] +build-backend = "setuptools.build_meta" + +[project] +name = "aas-core-protobuf-generation" +version = "0.0.1" + +description = "Generate ProtoBuf definitions for AAS meta-models." +readme = "README.md" +requires-python = ">=3.7" + +authors = [ + { name = "Marko Ristin", email = "marko@ristin.ch" } +] + +dependencies = [ + "aas-core-meta@git+https://github.com/aas-core-works/aas-core-meta@f9cbdb3#egg=aas-core-meta", + "aas-core-codegen@git+https://github.com/aas-core-works/aas-core-codegen@6df5c9e8#egg=aas-core-codegen", +] + +[project.urls] +repository = "https://github.com/aas-core-works/aas-core-protobuf" + +license = "MIT" + +[tool.setuptools.packages.find] +include = ["aas_core_protobuf_generation"] +exclude = ["precommit.py"] + +# Development dependencies +[tool] +[tool.black] +line-length = 88 + +[tool.pylint] +disable = ["too-many-locals", "no-member", "duplicate-code"] + +[tool.mypy] +python_version = "3.8" +strict = true + +[project.optional-dependencies] +dev = [ + "black==24.8.0", + "pylint==3.2.7", + "mypy==1.5.1", +] diff --git a/dev_scripts/snippets/v3/namespace.txt b/dev_scripts/snippets/v3/namespace.txt new file mode 100644 index 0000000..74a993a --- /dev/null +++ b/dev_scripts/snippets/v3/namespace.txt @@ -0,0 +1 @@ +aas_core3 \ No newline at end of file diff --git a/dev_scripts/snippets/v3_1/namespace.txt b/dev_scripts/snippets/v3_1/namespace.txt new file mode 100644 index 0000000..63a4767 --- /dev/null +++ b/dev_scripts/snippets/v3_1/namespace.txt @@ -0,0 +1 @@ +aas_core3_1 \ No newline at end of file diff --git a/v3/types.proto b/v3/types.proto new file mode 100644 index 0000000..138dd73 --- /dev/null +++ b/v3/types.proto @@ -0,0 +1,3780 @@ +/* + * This code has been automatically generated by aas-core-codegen. + * Do NOT edit or append. + */ + +syntax = "proto3"; + +package aas_core3; + + + /// + /// Single extension of an element. + /// + message Extension { + /// + /// Name of the extension. + /// + /// + /// + /// Constraints: + /// + /// + /// + string name = 1; + + /// + /// Identifier of a supplemental semantic definition of the element. + /// It is called supplemental semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + repeated Reference supplemental_semantic_ids = 2; + + /// + /// Type of the value of the extension. + /// + /// + /// Default: + /// + optional DataTypeDefXsd value_type = 3; + + /// + /// Reference to an element the extension refers to. + /// + repeated Reference refers_to = 4; + + /// + /// Value of the extension + /// + optional string value = 5; + + /// + /// Identifier of the semantic definition of the element. It is called semantic ID + /// of the element or also main semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + optional Reference semantic_id = 6; + } + + /// + /// Enumeration for denoting whether an element is a template or an instance. + /// + enum ModellingKind { + Modellingkind_UNSPECIFIED = 0; + + /// + /// Specification of the common features of a structured element in sufficient detail + /// that such a instance can be instantiated using it + /// + Modellingkind_TEMPLATE = 1; + + /// + /// Concrete, clearly identifiable element instance. Its creation and validation + /// may be guided by a corresponding element template. + /// + Modellingkind_INSTANCE = 2; + } + + /// + /// Administrative meta-information for an element like version + /// information. + /// + /// + /// + /// Constraints: + /// + /// + /// + message AdministrativeInformation { + /// + /// Revision of the element. + /// + optional string revision = 1; + + /// + /// Embedded data specification. + /// + repeated EmbeddedDataSpecification embedded_data_specifications = 2; + + /// + /// The subject ID of the subject responsible for making the element. + /// + optional Reference creator = 3; + + /// + /// Identifier of the template that guided the creation of the element. + /// + /// + /// + /// In case of a submodel the is the identifier + /// of the submodel template ID that guided the creation of the submodel + /// + /// + /// The is not relevant for validation in Submodels. + /// For validation the shall be used. + /// + /// + /// Usage of is not restricted to submodel instances. So also + /// the creation of submodel templates can be guided by another submodel template. + /// + /// + optional string template_id = 4; + + /// + /// Version of the element. + /// + optional string version = 5; + } + + /// + /// Enumeration for kinds of qualifiers. + /// + /// + /// This element is experimental and therefore may be subject to change or may be + /// removed completely in future versions of the meta-model. + /// + enum QualifierKind { + Qualifierkind_UNSPECIFIED = 0; + + /// + /// qualifies the value of the element and can change during run-time. + /// + /// + /// Value qualifiers are only applicable to elements with kind + /// . + /// + Qualifierkind_VALUE_QUALIFIER = 1; + + /// + /// qualifies the semantic definition the element is referring to + /// () + /// + Qualifierkind_CONCEPT_QUALIFIER = 2; + + /// + /// qualifies the elements within a specific submodel on concept level. + /// + /// + /// Template qualifiers are only applicable to elements with kind + /// . + /// + Qualifierkind_TEMPLATE_QUALIFIER = 3; + } + + /// + /// A qualifier is a type-value-pair that makes additional statements w.r.t. the value + /// of the element. + /// + /// + /// + /// Constraints: + /// + /// + /// + message Qualifier { + /// + /// The qualifier kind describes the kind of the qualifier that is applied to the + /// element. + /// + /// + /// Default: + /// + optional QualifierKind kind = 1; + + /// + /// Data type of the qualifier value. + /// + DataTypeDefXsd value_type = 2; + + /// + /// The qualifier type describes the type of the qualifier that is applied to + /// the element. + /// + string type = 3; + + /// + /// Identifier of a supplemental semantic definition of the element. + /// It is called supplemental semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + repeated Reference supplemental_semantic_ids = 4; + + /// + /// The qualifier value is the value of the qualifier. + /// + optional string value = 5; + + /// + /// Reference to the global unique ID of a coded value. + /// + /// + /// It is recommended to use a global reference. + /// + optional Reference value_id = 6; + + /// + /// Identifier of the semantic definition of the element. It is called semantic ID + /// of the element or also main semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + optional Reference semantic_id = 7; + } + + /// + /// An asset administration shell. + /// + message AssetAdministrationShell { + /// + /// References to submodels of the AAS. + /// + /// + /// + /// A submodel is a description of an aspect of the asset the AAS is representing. + /// + /// + /// The asset of an AAS is typically described by one or more submodels. + /// + /// + /// Temporarily no submodel might be assigned to the AAS. + /// + /// + repeated Reference submodels = 1; + + /// + /// The category is a value that gives further meta information + /// w.r.t. to the class of the element. + /// It affects the expected existence of attributes and the applicability of + /// constraints. + /// + /// + /// The category is not identical to the semantic definition + /// () of an element. The category e.g. could denote that + /// the element is a measurement value whereas the semantic definition of + /// the element would denote that it is the measured temperature. + /// + optional string category = 2; + + /// + /// In case of identifiables this attribute is a short name of the element. + /// In case of referable this ID is an identifying string of the element within + /// its name space. + /// + /// + /// In case the element is a property and the property has a semantic definition + /// () conformant to IEC61360 + /// the is typically identical to the short name in English. + /// + optional string id_short = 3; + + /// + /// An extension of the element. + /// + repeated Extension extensions = 4; + + /// + /// Display name. Can be provided in several languages. + /// + repeated LangStringNameType display_name = 5; + + /// + /// Embedded data specification. + /// + repeated EmbeddedDataSpecification embedded_data_specifications = 6; + + /// + /// Meta-information about the asset the AAS is representing. + /// + AssetInformation asset_information = 7; + + /// + /// The reference to the AAS the AAS was derived from. + /// + optional Reference derived_from = 8; + + /// + /// The globally unique identification of the element. + /// + string id = 9; + + /// + /// Description or comments on the element. + /// + /// + /// + /// The description can be provided in several languages. + /// + /// + /// If no description is defined, then the definition of the concept + /// description that defines the semantics of the element is used. + /// + /// + /// Additional information can be provided, e.g., if the element is + /// qualified and which qualifier types can be expected in which + /// context or which additional data specification templates are + /// provided. + /// + /// + repeated LangStringTextType description = 10; + + /// + /// Administrative information of an identifiable element. + /// + /// + /// Some of the administrative information like the version number might need to + /// be part of the identification. + /// + optional AdministrativeInformation administration = 11; + } + + /// + /// In identifying meta data of the asset that is + /// represented by an AAS is defined. + /// + /// + /// + /// The asset may either represent an asset type or an asset instance. + /// + /// + /// The asset has a globally unique identifier plus – if needed – additional domain + /// specific (proprietary) identifiers. However, to support the corner case of very + /// first phase of lifecycle where a stabilised/constant_set global asset identifier + /// does not already exist, the corresponding attribute is + /// optional. + /// + /// + /// Constraints: + /// + /// + /// + message AssetInformation { + /// + /// Additional domain-specific, typically proprietary identifier for the asset like + /// e.g., serial number etc. + /// + repeated SpecificAssetId specific_asset_ids = 1; + + /// + /// Denotes whether the Asset is of kind or + /// . + /// + AssetKind asset_kind = 2; + + /// + /// In case is applicable the is the asset ID + /// of the type asset of the asset under consideration + /// as identified by . + /// + /// + /// In case is "Instance" than the denotes + /// which "Type" the asset is of. But it is also possible + /// to have an of an asset of kind "Type". + /// + optional string asset_type = 3; + + /// + /// Global identifier of the asset the AAS is representing. + /// + /// + /// + /// This attribute is required as soon as the AAS is exchanged via partners in the life + /// cycle of the asset. In a first phase of the life cycle the asset might not yet have + /// a global ID but already an internal identifier. The internal identifier would be + /// modelled via . + /// + /// + /// This is a global reference. + /// + /// + optional string global_asset_id = 4; + + /// + /// Thumbnail of the asset represented by the Asset Administration Shell. + /// + /// + /// Used as default. + /// + optional Resource default_thumbnail = 5; + } + + /// + /// Resource represents an address to a file (a locator). The value is an URI that + /// can represent an absolute or relative path + /// + message Resource { + /// + /// Content type of the content of the file. + /// + /// + /// The content type states which file extensions the file can have. + /// + optional string content_type = 1; + + /// + /// Path and name of the resource (with file extension). + /// + /// + /// The path can be absolute or relative. + /// + string path = 2; + } + + /// + /// Enumeration for denoting whether an asset is a type asset or an instance asset. + /// + enum AssetKind { + Assetkind_UNSPECIFIED = 0; + + /// + /// Type asset + /// + Assetkind_TYPE = 1; + + /// + /// Instance asset + /// + Assetkind_INSTANCE = 2; + + /// + /// Neither a type asset nor an instance asset + /// + Assetkind_NOT_APPLICABLE = 3; + } + + /// + /// A specific asset ID describes a generic supplementary identifying attribute of the + /// asset. + /// + /// + /// + /// The specific asset ID is not necessarily globally unique. + /// + /// + /// Constraints: + /// + /// + /// + message SpecificAssetId { + /// + /// The value of the specific asset identifier with the corresponding name. + /// + string value = 1; + + /// + /// Name of the identifier + /// + string name = 2; + + /// + /// The (external) subject the key belongs to or has meaning to. + /// + /// + /// This is a global reference. + /// + optional Reference external_subject_id = 3; + + /// + /// Identifier of a supplemental semantic definition of the element. + /// It is called supplemental semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + repeated Reference supplemental_semantic_ids = 4; + + /// + /// Identifier of the semantic definition of the element. It is called semantic ID + /// of the element or also main semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + optional Reference semantic_id = 5; + } + + /// + /// A submodel defines a specific aspect of the asset represented by the AAS. + /// + /// + /// A submodel is used to structure the digital representation and technical + /// functionality of an Administration Shell into distinguishable parts. Each submodel + /// refers to a well-defined domain or subject matter. Submodels can become + /// standardized and, thus, become submodels templates. + /// + message Submodel { + /// + /// Additional qualification of a qualifiable element. + /// + /// + /// + /// Constraints: + /// + /// + /// + repeated Qualifier qualifiers = 1; + + /// + /// The category is a value that gives further meta information + /// w.r.t. to the class of the element. + /// It affects the expected existence of attributes and the applicability of + /// constraints. + /// + /// + /// The category is not identical to the semantic definition + /// () of an element. The category e.g. could denote that + /// the element is a measurement value whereas the semantic definition of + /// the element would denote that it is the measured temperature. + /// + optional string category = 2; + + /// + /// A submodel consists of zero or more submodel elements. + /// + repeated SubmodelElement submodel_elements = 3; + + /// + /// In case of identifiables this attribute is a short name of the element. + /// In case of referable this ID is an identifying string of the element within + /// its name space. + /// + /// + /// In case the element is a property and the property has a semantic definition + /// () conformant to IEC61360 + /// the is typically identical to the short name in English. + /// + optional string id_short = 4; + + /// + /// Identifier of a supplemental semantic definition of the element. + /// It is called supplemental semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + repeated Reference supplemental_semantic_ids = 5; + + /// + /// An extension of the element. + /// + repeated Extension extensions = 6; + + /// + /// Display name. Can be provided in several languages. + /// + repeated LangStringNameType display_name = 7; + + /// + /// Kind of the element: either type or instance. + /// + /// + /// Default: + /// + optional ModellingKind kind = 8; + + /// + /// Embedded data specification. + /// + repeated EmbeddedDataSpecification embedded_data_specifications = 9; + + /// + /// The globally unique identification of the element. + /// + string id = 10; + + /// + /// Description or comments on the element. + /// + /// + /// + /// The description can be provided in several languages. + /// + /// + /// If no description is defined, then the definition of the concept + /// description that defines the semantics of the element is used. + /// + /// + /// Additional information can be provided, e.g., if the element is + /// qualified and which qualifier types can be expected in which + /// context or which additional data specification templates are + /// provided. + /// + /// + repeated LangStringTextType description = 11; + + /// + /// Administrative information of an identifiable element. + /// + /// + /// Some of the administrative information like the version number might need to + /// be part of the identification. + /// + optional AdministrativeInformation administration = 12; + + /// + /// Identifier of the semantic definition of the element. It is called semantic ID + /// of the element or also main semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + optional Reference semantic_id = 13; + } + + /// + /// A relationship element is used to define a relationship between two elements + /// being either referable (model reference) or external (global reference). + /// + message RelationshipElement { + /// + /// Additional qualification of a qualifiable element. + /// + /// + /// + /// Constraints: + /// + /// + /// + repeated Qualifier qualifiers = 1; + + /// + /// The category is a value that gives further meta information + /// w.r.t. to the class of the element. + /// It affects the expected existence of attributes and the applicability of + /// constraints. + /// + /// + /// The category is not identical to the semantic definition + /// () of an element. The category e.g. could denote that + /// the element is a measurement value whereas the semantic definition of + /// the element would denote that it is the measured temperature. + /// + optional string category = 2; + + /// + /// Reference to the second element in the relationship taking the role of the object. + /// + Reference second = 3; + + /// + /// In case of identifiables this attribute is a short name of the element. + /// In case of referable this ID is an identifying string of the element within + /// its name space. + /// + /// + /// In case the element is a property and the property has a semantic definition + /// () conformant to IEC61360 + /// the is typically identical to the short name in English. + /// + optional string id_short = 4; + + /// + /// Identifier of a supplemental semantic definition of the element. + /// It is called supplemental semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + repeated Reference supplemental_semantic_ids = 5; + + /// + /// Reference to the first element in the relationship taking the role of the subject. + /// + Reference first = 6; + + /// + /// An extension of the element. + /// + repeated Extension extensions = 7; + + /// + /// Display name. Can be provided in several languages. + /// + repeated LangStringNameType display_name = 8; + + /// + /// Embedded data specification. + /// + repeated EmbeddedDataSpecification embedded_data_specifications = 9; + + /// + /// Description or comments on the element. + /// + /// + /// + /// The description can be provided in several languages. + /// + /// + /// If no description is defined, then the definition of the concept + /// description that defines the semantics of the element is used. + /// + /// + /// Additional information can be provided, e.g., if the element is + /// qualified and which qualifier types can be expected in which + /// context or which additional data specification templates are + /// provided. + /// + /// + repeated LangStringTextType description = 10; + + /// + /// Identifier of the semantic definition of the element. It is called semantic ID + /// of the element or also main semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + optional Reference semantic_id = 11; + } + + /// + /// Enumeration of all possible elements of a . + /// + enum AasSubmodelElements { + Aassubmodelelements_UNSPECIFIED = 0; + + Aassubmodelelements_ANNOTATED_RELATIONSHIP_ELEMENT = 1; + + Aassubmodelelements_BASIC_EVENT_ELEMENT = 2; + + Aassubmodelelements_BLOB = 3; + + Aassubmodelelements_CAPABILITY = 4; + + Aassubmodelelements_DATA_ELEMENT = 5; + + Aassubmodelelements_ENTITY = 6; + + Aassubmodelelements_EVENT_ELEMENT = 7; + + Aassubmodelelements_FILE = 8; + + Aassubmodelelements_MULTI_LANGUAGE_PROPERTY = 9; + + Aassubmodelelements_OPERATION = 10; + + Aassubmodelelements_PROPERTY = 11; + + Aassubmodelelements_RANGE = 12; + + Aassubmodelelements_REFERENCE_ELEMENT = 13; + + Aassubmodelelements_RELATIONSHIP_ELEMENT = 14; + + Aassubmodelelements_SUBMODEL_ELEMENT = 15; + + Aassubmodelelements_SUBMODEL_ELEMENT_LIST = 16; + + Aassubmodelelements_SUBMODEL_ELEMENT_COLLECTION = 17; + } + + /// + /// A submodel element list is an ordered list of submodel elements. + /// + /// + /// + /// The numbering starts with zero (0). + /// + /// + /// Constraints: + /// + /// + /// + message SubmodelElementList { + /// + /// Additional qualification of a qualifiable element. + /// + /// + /// + /// Constraints: + /// + /// + /// + repeated Qualifier qualifiers = 1; + + /// + /// The category is a value that gives further meta information + /// w.r.t. to the class of the element. + /// It affects the expected existence of attributes and the applicability of + /// constraints. + /// + /// + /// The category is not identical to the semantic definition + /// () of an element. The category e.g. could denote that + /// the element is a measurement value whereas the semantic definition of + /// the element would denote that it is the measured temperature. + /// + optional string category = 2; + + /// + /// Defines whether order in list is relevant. If = False + /// then the list is representing a set or a bag. + /// + /// + /// Default: True + /// + optional bool order_relevant = 3; + + /// + /// In case of identifiables this attribute is a short name of the element. + /// In case of referable this ID is an identifying string of the element within + /// its name space. + /// + /// + /// In case the element is a property and the property has a semantic definition + /// () conformant to IEC61360 + /// the is typically identical to the short name in English. + /// + optional string id_short = 4; + + /// + /// Identifier of a supplemental semantic definition of the element. + /// It is called supplemental semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + repeated Reference supplemental_semantic_ids = 5; + + /// + /// The submodel element type of the submodel elements contained in the list. + /// + AasSubmodelElements type_value_list_element = 6; + + /// + /// Semantic ID the submodel elements contained in the list match to. + /// + /// + /// It is recommended to use a global reference. + /// + optional Reference semantic_id_list_element = 7; + + /// + /// The value type of the submodel element contained in the list. + /// + optional DataTypeDefXsd value_type_list_element = 8; + + /// + /// An extension of the element. + /// + repeated Extension extensions = 9; + + /// + /// Display name. Can be provided in several languages. + /// + repeated LangStringNameType display_name = 10; + + /// + /// Embedded data specification. + /// + repeated EmbeddedDataSpecification embedded_data_specifications = 11; + + /// + /// Submodel element contained in the list. + /// + /// + /// The list is ordered. + /// + repeated SubmodelElement value = 12; + + /// + /// Description or comments on the element. + /// + /// + /// + /// The description can be provided in several languages. + /// + /// + /// If no description is defined, then the definition of the concept + /// description that defines the semantics of the element is used. + /// + /// + /// Additional information can be provided, e.g., if the element is + /// qualified and which qualifier types can be expected in which + /// context or which additional data specification templates are + /// provided. + /// + /// + repeated LangStringTextType description = 13; + + /// + /// Identifier of the semantic definition of the element. It is called semantic ID + /// of the element or also main semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + optional Reference semantic_id = 14; + } + + /// + /// A submodel element collection is a kind of struct, i.e. a a logical encapsulation + /// of multiple named values. It has a fixed number of submodel elements. + /// + message SubmodelElementCollection { + /// + /// Additional qualification of a qualifiable element. + /// + /// + /// + /// Constraints: + /// + /// + /// + repeated Qualifier qualifiers = 1; + + /// + /// The category is a value that gives further meta information + /// w.r.t. to the class of the element. + /// It affects the expected existence of attributes and the applicability of + /// constraints. + /// + /// + /// The category is not identical to the semantic definition + /// () of an element. The category e.g. could denote that + /// the element is a measurement value whereas the semantic definition of + /// the element would denote that it is the measured temperature. + /// + optional string category = 2; + + /// + /// In case of identifiables this attribute is a short name of the element. + /// In case of referable this ID is an identifying string of the element within + /// its name space. + /// + /// + /// In case the element is a property and the property has a semantic definition + /// () conformant to IEC61360 + /// the is typically identical to the short name in English. + /// + optional string id_short = 3; + + /// + /// Identifier of a supplemental semantic definition of the element. + /// It is called supplemental semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + repeated Reference supplemental_semantic_ids = 4; + + /// + /// Submodel element contained in the collection. + /// + repeated SubmodelElement value = 5; + + /// + /// An extension of the element. + /// + repeated Extension extensions = 6; + + /// + /// Display name. Can be provided in several languages. + /// + repeated LangStringNameType display_name = 7; + + /// + /// Embedded data specification. + /// + repeated EmbeddedDataSpecification embedded_data_specifications = 8; + + /// + /// Description or comments on the element. + /// + /// + /// + /// The description can be provided in several languages. + /// + /// + /// If no description is defined, then the definition of the concept + /// description that defines the semantics of the element is used. + /// + /// + /// Additional information can be provided, e.g., if the element is + /// qualified and which qualifier types can be expected in which + /// context or which additional data specification templates are + /// provided. + /// + /// + repeated LangStringTextType description = 9; + + /// + /// Identifier of the semantic definition of the element. It is called semantic ID + /// of the element or also main semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + optional Reference semantic_id = 10; + } + + /// + /// A property is a data element that has a single value. + /// + /// + /// + /// Constraints: + /// + /// + /// + message Property { + /// + /// Additional qualification of a qualifiable element. + /// + /// + /// + /// Constraints: + /// + /// + /// + repeated Qualifier qualifiers = 1; + + /// + /// The category is a value that gives further meta information + /// w.r.t. to the class of the element. + /// It affects the expected existence of attributes and the applicability of + /// constraints. + /// + /// + /// The category is not identical to the semantic definition + /// () of an element. The category e.g. could denote that + /// the element is a measurement value whereas the semantic definition of + /// the element would denote that it is the measured temperature. + /// + optional string category = 2; + + /// + /// In case of identifiables this attribute is a short name of the element. + /// In case of referable this ID is an identifying string of the element within + /// its name space. + /// + /// + /// In case the element is a property and the property has a semantic definition + /// () conformant to IEC61360 + /// the is typically identical to the short name in English. + /// + optional string id_short = 3; + + /// + /// Identifier of a supplemental semantic definition of the element. + /// It is called supplemental semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + repeated Reference supplemental_semantic_ids = 4; + + /// + /// An extension of the element. + /// + repeated Extension extensions = 5; + + /// + /// Display name. Can be provided in several languages. + /// + repeated LangStringNameType display_name = 6; + + /// + /// Embedded data specification. + /// + repeated EmbeddedDataSpecification embedded_data_specifications = 7; + + /// + /// Data type of the value + /// + DataTypeDefXsd value_type = 8; + + /// + /// The value of the property instance. + /// + optional string value = 9; + + /// + /// Description or comments on the element. + /// + /// + /// + /// The description can be provided in several languages. + /// + /// + /// If no description is defined, then the definition of the concept + /// description that defines the semantics of the element is used. + /// + /// + /// Additional information can be provided, e.g., if the element is + /// qualified and which qualifier types can be expected in which + /// context or which additional data specification templates are + /// provided. + /// + /// + repeated LangStringTextType description = 10; + + /// + /// Reference to the global unique ID of a coded value. + /// + /// + /// It is recommended to use a global reference. + /// + optional Reference value_id = 11; + + /// + /// Identifier of the semantic definition of the element. It is called semantic ID + /// of the element or also main semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + optional Reference semantic_id = 12; + } + + /// + /// A property is a data element that has a multi-language value. + /// + /// + /// + /// Constraints: + /// + /// + /// + message MultiLanguageProperty { + /// + /// Additional qualification of a qualifiable element. + /// + /// + /// + /// Constraints: + /// + /// + /// + repeated Qualifier qualifiers = 1; + + /// + /// The category is a value that gives further meta information + /// w.r.t. to the class of the element. + /// It affects the expected existence of attributes and the applicability of + /// constraints. + /// + /// + /// The category is not identical to the semantic definition + /// () of an element. The category e.g. could denote that + /// the element is a measurement value whereas the semantic definition of + /// the element would denote that it is the measured temperature. + /// + optional string category = 2; + + /// + /// In case of identifiables this attribute is a short name of the element. + /// In case of referable this ID is an identifying string of the element within + /// its name space. + /// + /// + /// In case the element is a property and the property has a semantic definition + /// () conformant to IEC61360 + /// the is typically identical to the short name in English. + /// + optional string id_short = 3; + + /// + /// Identifier of a supplemental semantic definition of the element. + /// It is called supplemental semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + repeated Reference supplemental_semantic_ids = 4; + + /// + /// An extension of the element. + /// + repeated Extension extensions = 5; + + /// + /// Display name. Can be provided in several languages. + /// + repeated LangStringNameType display_name = 6; + + /// + /// The value of the property instance. + /// + repeated LangStringTextType value = 7; + + /// + /// Embedded data specification. + /// + repeated EmbeddedDataSpecification embedded_data_specifications = 8; + + /// + /// Reference to the global unique ID of a coded value. + /// + /// + /// It is recommended to use a global reference. + /// + optional Reference value_id = 9; + + /// + /// Description or comments on the element. + /// + /// + /// + /// The description can be provided in several languages. + /// + /// + /// If no description is defined, then the definition of the concept + /// description that defines the semantics of the element is used. + /// + /// + /// Additional information can be provided, e.g., if the element is + /// qualified and which qualifier types can be expected in which + /// context or which additional data specification templates are + /// provided. + /// + /// + repeated LangStringTextType description = 10; + + /// + /// Identifier of the semantic definition of the element. It is called semantic ID + /// of the element or also main semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + optional Reference semantic_id = 11; + } + + /// + /// A range data element is a data element that defines a range with min and max. + /// + message Range { + /// + /// Additional qualification of a qualifiable element. + /// + /// + /// + /// Constraints: + /// + /// + /// + repeated Qualifier qualifiers = 1; + + /// + /// The category is a value that gives further meta information + /// w.r.t. to the class of the element. + /// It affects the expected existence of attributes and the applicability of + /// constraints. + /// + /// + /// The category is not identical to the semantic definition + /// () of an element. The category e.g. could denote that + /// the element is a measurement value whereas the semantic definition of + /// the element would denote that it is the measured temperature. + /// + optional string category = 2; + + /// + /// The maximum value of the range. + /// + /// + /// If the max value is missing, then the value is assumed to be positive infinite. + /// + optional string max = 3; + + /// + /// In case of identifiables this attribute is a short name of the element. + /// In case of referable this ID is an identifying string of the element within + /// its name space. + /// + /// + /// In case the element is a property and the property has a semantic definition + /// () conformant to IEC61360 + /// the is typically identical to the short name in English. + /// + optional string id_short = 4; + + /// + /// Identifier of a supplemental semantic definition of the element. + /// It is called supplemental semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + repeated Reference supplemental_semantic_ids = 5; + + /// + /// An extension of the element. + /// + repeated Extension extensions = 6; + + /// + /// Display name. Can be provided in several languages. + /// + repeated LangStringNameType display_name = 7; + + /// + /// Embedded data specification. + /// + repeated EmbeddedDataSpecification embedded_data_specifications = 8; + + /// + /// Data type of the min und max + /// + DataTypeDefXsd value_type = 9; + + /// + /// Description or comments on the element. + /// + /// + /// + /// The description can be provided in several languages. + /// + /// + /// If no description is defined, then the definition of the concept + /// description that defines the semantics of the element is used. + /// + /// + /// Additional information can be provided, e.g., if the element is + /// qualified and which qualifier types can be expected in which + /// context or which additional data specification templates are + /// provided. + /// + /// + repeated LangStringTextType description = 10; + + /// + /// Identifier of the semantic definition of the element. It is called semantic ID + /// of the element or also main semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + optional Reference semantic_id = 11; + + /// + /// The minimum value of the range. + /// + /// + /// If the min value is missing, then the value is assumed to be negative infinite. + /// + optional string min = 12; + } + + /// + /// A reference element is a data element that defines a logical reference to another + /// element within the same or another AAS or a reference to an external object or + /// entity. + /// + message ReferenceElement { + /// + /// Additional qualification of a qualifiable element. + /// + /// + /// + /// Constraints: + /// + /// + /// + repeated Qualifier qualifiers = 1; + + /// + /// The category is a value that gives further meta information + /// w.r.t. to the class of the element. + /// It affects the expected existence of attributes and the applicability of + /// constraints. + /// + /// + /// The category is not identical to the semantic definition + /// () of an element. The category e.g. could denote that + /// the element is a measurement value whereas the semantic definition of + /// the element would denote that it is the measured temperature. + /// + optional string category = 2; + + /// + /// Global reference to an external object or entity or a logical reference to + /// another element within the same or another AAS (i.e. a model reference to + /// a Referable). + /// + optional Reference value = 3; + + /// + /// In case of identifiables this attribute is a short name of the element. + /// In case of referable this ID is an identifying string of the element within + /// its name space. + /// + /// + /// In case the element is a property and the property has a semantic definition + /// () conformant to IEC61360 + /// the is typically identical to the short name in English. + /// + optional string id_short = 4; + + /// + /// Identifier of a supplemental semantic definition of the element. + /// It is called supplemental semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + repeated Reference supplemental_semantic_ids = 5; + + /// + /// An extension of the element. + /// + repeated Extension extensions = 6; + + /// + /// Display name. Can be provided in several languages. + /// + repeated LangStringNameType display_name = 7; + + /// + /// Embedded data specification. + /// + repeated EmbeddedDataSpecification embedded_data_specifications = 8; + + /// + /// Description or comments on the element. + /// + /// + /// + /// The description can be provided in several languages. + /// + /// + /// If no description is defined, then the definition of the concept + /// description that defines the semantics of the element is used. + /// + /// + /// Additional information can be provided, e.g., if the element is + /// qualified and which qualifier types can be expected in which + /// context or which additional data specification templates are + /// provided. + /// + /// + repeated LangStringTextType description = 9; + + /// + /// Identifier of the semantic definition of the element. It is called semantic ID + /// of the element or also main semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + optional Reference semantic_id = 10; + } + + /// + /// A is a data element that represents a file that is contained with its + /// source code in the value attribute. + /// + message Blob { + /// + /// Additional qualification of a qualifiable element. + /// + /// + /// + /// Constraints: + /// + /// + /// + repeated Qualifier qualifiers = 1; + + /// + /// The category is a value that gives further meta information + /// w.r.t. to the class of the element. + /// It affects the expected existence of attributes and the applicability of + /// constraints. + /// + /// + /// The category is not identical to the semantic definition + /// () of an element. The category e.g. could denote that + /// the element is a measurement value whereas the semantic definition of + /// the element would denote that it is the measured temperature. + /// + optional string category = 2; + + /// + /// Content type of the content of the . + /// + /// + /// + /// The content type (MIME type) states which file extensions the file can have. + /// + /// + /// Valid values are content types like e.g. application/json, application/xls, + /// image/jpg. + /// + /// + /// The allowed values are defined as in RFC2046. + /// + /// + string content_type = 3; + + /// + /// In case of identifiables this attribute is a short name of the element. + /// In case of referable this ID is an identifying string of the element within + /// its name space. + /// + /// + /// In case the element is a property and the property has a semantic definition + /// () conformant to IEC61360 + /// the is typically identical to the short name in English. + /// + optional string id_short = 4; + + /// + /// Identifier of a supplemental semantic definition of the element. + /// It is called supplemental semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + repeated Reference supplemental_semantic_ids = 5; + + /// + /// The value of the instance of a blob data element. + /// + /// + /// In contrast to the file property the file content is stored directly as value + /// in the data element. + /// + optional bytes value = 6; + + /// + /// An extension of the element. + /// + repeated Extension extensions = 7; + + /// + /// Display name. Can be provided in several languages. + /// + repeated LangStringNameType display_name = 8; + + /// + /// Embedded data specification. + /// + repeated EmbeddedDataSpecification embedded_data_specifications = 9; + + /// + /// Description or comments on the element. + /// + /// + /// + /// The description can be provided in several languages. + /// + /// + /// If no description is defined, then the definition of the concept + /// description that defines the semantics of the element is used. + /// + /// + /// Additional information can be provided, e.g., if the element is + /// qualified and which qualifier types can be expected in which + /// context or which additional data specification templates are + /// provided. + /// + /// + repeated LangStringTextType description = 10; + + /// + /// Identifier of the semantic definition of the element. It is called semantic ID + /// of the element or also main semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + optional Reference semantic_id = 11; + } + + /// + /// A File is a data element that represents an address to a file (a locator). + /// + /// + /// The value is an URI that can represent an absolute or relative path. + /// + message File { + /// + /// Path and name of the referenced file (with file extension). + /// + /// + /// The path can be absolute or relative. + /// + optional string value = 1; + + /// + /// Additional qualification of a qualifiable element. + /// + /// + /// + /// Constraints: + /// + /// + /// + repeated Qualifier qualifiers = 2; + + /// + /// The category is a value that gives further meta information + /// w.r.t. to the class of the element. + /// It affects the expected existence of attributes and the applicability of + /// constraints. + /// + /// + /// The category is not identical to the semantic definition + /// () of an element. The category e.g. could denote that + /// the element is a measurement value whereas the semantic definition of + /// the element would denote that it is the measured temperature. + /// + optional string category = 3; + + /// + /// In case of identifiables this attribute is a short name of the element. + /// In case of referable this ID is an identifying string of the element within + /// its name space. + /// + /// + /// In case the element is a property and the property has a semantic definition + /// () conformant to IEC61360 + /// the is typically identical to the short name in English. + /// + optional string id_short = 4; + + /// + /// Identifier of a supplemental semantic definition of the element. + /// It is called supplemental semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + repeated Reference supplemental_semantic_ids = 5; + + /// + /// An extension of the element. + /// + repeated Extension extensions = 6; + + /// + /// Display name. Can be provided in several languages. + /// + repeated LangStringNameType display_name = 7; + + /// + /// Embedded data specification. + /// + repeated EmbeddedDataSpecification embedded_data_specifications = 8; + + /// + /// Description or comments on the element. + /// + /// + /// + /// The description can be provided in several languages. + /// + /// + /// If no description is defined, then the definition of the concept + /// description that defines the semantics of the element is used. + /// + /// + /// Additional information can be provided, e.g., if the element is + /// qualified and which qualifier types can be expected in which + /// context or which additional data specification templates are + /// provided. + /// + /// + repeated LangStringTextType description = 9; + + /// + /// Identifier of the semantic definition of the element. It is called semantic ID + /// of the element or also main semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + optional Reference semantic_id = 10; + + /// + /// Content type of the content of the file. + /// + /// + /// The content type states which file extensions the file can have. + /// + string content_type = 11; + } + + /// + /// An annotated relationship element is a relationship element that can be annotated + /// with additional data elements. + /// + message AnnotatedRelationshipElement { + /// + /// Additional qualification of a qualifiable element. + /// + /// + /// + /// Constraints: + /// + /// + /// + repeated Qualifier qualifiers = 1; + + /// + /// The category is a value that gives further meta information + /// w.r.t. to the class of the element. + /// It affects the expected existence of attributes and the applicability of + /// constraints. + /// + /// + /// The category is not identical to the semantic definition + /// () of an element. The category e.g. could denote that + /// the element is a measurement value whereas the semantic definition of + /// the element would denote that it is the measured temperature. + /// + optional string category = 2; + + /// + /// Reference to the second element in the relationship taking the role of the object. + /// + Reference second = 3; + + /// + /// In case of identifiables this attribute is a short name of the element. + /// In case of referable this ID is an identifying string of the element within + /// its name space. + /// + /// + /// In case the element is a property and the property has a semantic definition + /// () conformant to IEC61360 + /// the is typically identical to the short name in English. + /// + optional string id_short = 4; + + /// + /// Identifier of a supplemental semantic definition of the element. + /// It is called supplemental semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + repeated Reference supplemental_semantic_ids = 5; + + /// + /// Reference to the first element in the relationship taking the role of the subject. + /// + Reference first = 6; + + /// + /// An extension of the element. + /// + repeated Extension extensions = 7; + + /// + /// Display name. Can be provided in several languages. + /// + repeated LangStringNameType display_name = 8; + + /// + /// Embedded data specification. + /// + repeated EmbeddedDataSpecification embedded_data_specifications = 9; + + /// + /// Description or comments on the element. + /// + /// + /// + /// The description can be provided in several languages. + /// + /// + /// If no description is defined, then the definition of the concept + /// description that defines the semantics of the element is used. + /// + /// + /// Additional information can be provided, e.g., if the element is + /// qualified and which qualifier types can be expected in which + /// context or which additional data specification templates are + /// provided. + /// + /// + repeated LangStringTextType description = 10; + + /// + /// A data element that represents an annotation that holds for the relationship + /// between the two elements + /// + repeated DataElement annotations = 11; + + /// + /// Identifier of the semantic definition of the element. It is called semantic ID + /// of the element or also main semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + optional Reference semantic_id = 12; + } + + /// + /// An entity is a submodel element that is used to model entities. + /// + /// + /// + /// Constraints: + /// + /// + /// + message Entity { + /// + /// Additional qualification of a qualifiable element. + /// + /// + /// + /// Constraints: + /// + /// + /// + repeated Qualifier qualifiers = 1; + + /// + /// The category is a value that gives further meta information + /// w.r.t. to the class of the element. + /// It affects the expected existence of attributes and the applicability of + /// constraints. + /// + /// + /// The category is not identical to the semantic definition + /// () of an element. The category e.g. could denote that + /// the element is a measurement value whereas the semantic definition of + /// the element would denote that it is the measured temperature. + /// + optional string category = 2; + + /// + /// Describes whether the entity is a co-managed entity or a self-managed entity. + /// + EntityType entity_type = 3; + + /// + /// Describes statements applicable to the entity by a set of submodel elements, + /// typically with a qualified value. + /// + repeated SubmodelElement statements = 4; + + /// + /// In case of identifiables this attribute is a short name of the element. + /// In case of referable this ID is an identifying string of the element within + /// its name space. + /// + /// + /// In case the element is a property and the property has a semantic definition + /// () conformant to IEC61360 + /// the is typically identical to the short name in English. + /// + optional string id_short = 5; + + /// + /// Identifier of a supplemental semantic definition of the element. + /// It is called supplemental semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + repeated Reference supplemental_semantic_ids = 6; + + /// + /// Global identifier of the asset the entity is representing. + /// + /// + /// This is a global reference. + /// + optional string global_asset_id = 7; + + /// + /// An extension of the element. + /// + repeated Extension extensions = 8; + + /// + /// Display name. Can be provided in several languages. + /// + repeated LangStringNameType display_name = 9; + + /// + /// Reference to a specific asset ID representing a supplementary identifier + /// of the asset represented by the Asset Administration Shell. + /// + repeated SpecificAssetId specific_asset_ids = 10; + + /// + /// Embedded data specification. + /// + repeated EmbeddedDataSpecification embedded_data_specifications = 11; + + /// + /// Description or comments on the element. + /// + /// + /// + /// The description can be provided in several languages. + /// + /// + /// If no description is defined, then the definition of the concept + /// description that defines the semantics of the element is used. + /// + /// + /// Additional information can be provided, e.g., if the element is + /// qualified and which qualifier types can be expected in which + /// context or which additional data specification templates are + /// provided. + /// + /// + repeated LangStringTextType description = 12; + + /// + /// Identifier of the semantic definition of the element. It is called semantic ID + /// of the element or also main semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + optional Reference semantic_id = 13; + } + + /// + /// Enumeration for denoting whether an entity is a self-managed entity or a co-managed + /// entity. + /// + enum EntityType { + Entitytype_UNSPECIFIED = 0; + + /// + /// For co-managed entities there is no separate AAS. Co-managed entities need to be + /// part of a self-managed entity. + /// + Entitytype_CO_MANAGED_ENTITY = 1; + + /// + /// Self-Managed Entities have their own AAS but can be part of the bill of material of + /// a composite self-managed entity. + /// + /// + /// The asset of an I4.0 Component is a self-managed entity per definition. + /// + Entitytype_SELF_MANAGED_ENTITY = 2; + } + + /// + /// Direction + /// + /// + /// This element is experimental and therefore may be subject to change or may be + /// removed completely in future versions of the meta-model. + /// + enum Direction { + Direction_UNSPECIFIED = 0; + + /// + /// Input direction. + /// + Direction_INPUT = 1; + + /// + /// Output direction + /// + Direction_OUTPUT = 2; + } + + /// + /// State of an event + /// + /// + /// This element is experimental and therefore may be subject to change or may be + /// removed completely in future versions of the meta-model. + /// + enum StateOfEvent { + Stateofevent_UNSPECIFIED = 0; + + /// + /// Event is on + /// + Stateofevent_ON = 1; + + /// + /// Event is off. + /// + Stateofevent_OFF = 2; + } + + /// + /// Defines the necessary information of an event instance sent out or received. + /// + /// + /// This element is experimental and therefore may be subject to change or may be + /// removed completely in future versions of the meta-model. + /// + message EventPayload { + /// + /// Reference to the source event element, including identification of + /// , , + /// 's. + /// + Reference source = 1; + + /// + /// Reference to the referable, which defines the scope of the event. + /// + /// + /// Can be , or + /// . + /// + Reference observable_reference = 2; + + /// + /// of the source event element, if available + /// + /// + /// It is recommended to use a global reference. + /// + optional Reference source_semantic_id = 3; + + /// + /// of the referable which defines the scope of + /// the event, if available. + /// + /// + /// It is recommended to use a global reference. + /// + optional Reference observable_semantic_id = 4; + + /// + /// Information for the outer message infrastructure for scheduling the event to + /// the respective communication channel. + /// + optional string topic = 5; + + /// + /// Timestamp in UTC, when this event was triggered. + /// + string time_stamp = 6; + + /// + /// Subject, who/which initiated the creation. + /// + /// + /// This is an external reference. + /// + optional Reference subject_id = 7; + + /// + /// Event specific payload. + /// + optional bytes payload = 8; + } + + /// + /// A basic event element. + /// + /// + /// This element is experimental and therefore may be subject to change or may be + /// removed completely in future versions of the meta-model. + /// + message BasicEventElement { + /// + /// Additional qualification of a qualifiable element. + /// + /// + /// + /// Constraints: + /// + /// + /// + repeated Qualifier qualifiers = 1; + + /// + /// The category is a value that gives further meta information + /// w.r.t. to the class of the element. + /// It affects the expected existence of attributes and the applicability of + /// constraints. + /// + /// + /// The category is not identical to the semantic definition + /// () of an element. The category e.g. could denote that + /// the element is a measurement value whereas the semantic definition of + /// the element would denote that it is the measured temperature. + /// + optional string category = 2; + + /// + /// Identifier of a supplemental semantic definition of the element. + /// It is called supplemental semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + repeated Reference supplemental_semantic_ids = 3; + + /// + /// Direction of event. + /// + /// + /// Can be { Input, Output }. + /// + Direction direction = 4; + + /// + /// Information for the outer message infrastructure for scheduling the event to the + /// respective communication channel. + /// + optional string message_topic = 5; + + /// + /// Display name. Can be provided in several languages. + /// + repeated LangStringNameType display_name = 6; + + /// + /// Timestamp in UTC, when the last event was received (input direction) or sent + /// (output direction). + /// + optional string last_update = 7; + + /// + /// For input direction: not applicable. + /// + /// + /// + /// For output direction: maximum interval in time, the respective Referable shall send + /// an update of the status of the event, even if no other trigger condition for + /// the event was not met. + /// + /// + /// Might be not specified, that is, there is no maximum interval + /// + /// + optional string max_interval = 8; + + /// + /// Identifier of the semantic definition of the element. It is called semantic ID + /// of the element or also main semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + optional Reference semantic_id = 9; + + /// + /// In case of identifiables this attribute is a short name of the element. + /// In case of referable this ID is an identifying string of the element within + /// its name space. + /// + /// + /// In case the element is a property and the property has a semantic definition + /// () conformant to IEC61360 + /// the is typically identical to the short name in English. + /// + optional string id_short = 10; + + /// + /// State of event. + /// + /// + /// Can be { On, Off }. + /// + StateOfEvent state = 11; + + /// + /// Reference to the , which defines the scope of the event. + /// Can be , , or + /// . + /// + /// + /// Reference to a referable, e.g., a data element or + /// a submodel, that is being observed. + /// + Reference observed = 12; + + /// + /// Information, which outer message infrastructure shall handle messages for + /// the . Refers to a , + /// , or + /// , which contains 's describing + /// the proprietary specification for the message broker. + /// + /// + /// For different message infrastructure, e.g., OPC UA or MQTT or AMQP, this + /// proprietary specification could be standardized by having respective Submodels. + /// + optional Reference message_broker = 13; + + /// + /// An extension of the element. + /// + repeated Extension extensions = 14; + + /// + /// Embedded data specification. + /// + repeated EmbeddedDataSpecification embedded_data_specifications = 15; + + /// + /// For input direction, reports on the maximum frequency, the software entity behind + /// the respective Referable can handle input events. + /// + /// + /// + /// For output events, specifies the maximum frequency of outputting this event to + /// an outer infrastructure. + /// + /// + /// Might be not specified, that is, there is no minimum interval. + /// + /// + optional string min_interval = 16; + + /// + /// Description or comments on the element. + /// + /// + /// + /// The description can be provided in several languages. + /// + /// + /// If no description is defined, then the definition of the concept + /// description that defines the semantics of the element is used. + /// + /// + /// Additional information can be provided, e.g., if the element is + /// qualified and which qualifier types can be expected in which + /// context or which additional data specification templates are + /// provided. + /// + /// + repeated LangStringTextType description = 17; + } + + /// + /// An operation is a submodel element with input and output variables. + /// + /// + /// + /// Constraints: + /// + /// + /// + message Operation { + /// + /// Additional qualification of a qualifiable element. + /// + /// + /// + /// Constraints: + /// + /// + /// + repeated Qualifier qualifiers = 1; + + /// + /// The category is a value that gives further meta information + /// w.r.t. to the class of the element. + /// It affects the expected existence of attributes and the applicability of + /// constraints. + /// + /// + /// The category is not identical to the semantic definition + /// () of an element. The category e.g. could denote that + /// the element is a measurement value whereas the semantic definition of + /// the element would denote that it is the measured temperature. + /// + optional string category = 2; + + /// + /// Input parameter of the operation. + /// + repeated OperationVariable input_variables = 3; + + /// + /// In case of identifiables this attribute is a short name of the element. + /// In case of referable this ID is an identifying string of the element within + /// its name space. + /// + /// + /// In case the element is a property and the property has a semantic definition + /// () conformant to IEC61360 + /// the is typically identical to the short name in English. + /// + optional string id_short = 4; + + /// + /// Identifier of a supplemental semantic definition of the element. + /// It is called supplemental semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + repeated Reference supplemental_semantic_ids = 5; + + /// + /// Output parameter of the operation. + /// + repeated OperationVariable output_variables = 6; + + /// + /// An extension of the element. + /// + repeated Extension extensions = 7; + + /// + /// Display name. Can be provided in several languages. + /// + repeated LangStringNameType display_name = 8; + + /// + /// Embedded data specification. + /// + repeated EmbeddedDataSpecification embedded_data_specifications = 9; + + /// + /// Parameter that is input and output of the operation. + /// + repeated OperationVariable inoutput_variables = 10; + + /// + /// Description or comments on the element. + /// + /// + /// + /// The description can be provided in several languages. + /// + /// + /// If no description is defined, then the definition of the concept + /// description that defines the semantics of the element is used. + /// + /// + /// Additional information can be provided, e.g., if the element is + /// qualified and which qualifier types can be expected in which + /// context or which additional data specification templates are + /// provided. + /// + /// + repeated LangStringTextType description = 11; + + /// + /// Identifier of the semantic definition of the element. It is called semantic ID + /// of the element or also main semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + optional Reference semantic_id = 12; + } + + /// + /// The value of an operation variable is a submodel element that is used as input + /// and/or output variable of an operation. + /// + message OperationVariable { + /// + /// Describes an argument or result of an operation via a submodel element + /// + SubmodelElement value = 1; + } + + /// + /// A capability is the implementation-independent description of the potential of an + /// asset to achieve a certain effect in the physical or virtual world. + /// + /// + /// The of a capability is typically an ontology. + /// Thus, reasoning on capabilities is enabled. + /// + message Capability { + /// + /// Additional qualification of a qualifiable element. + /// + /// + /// + /// Constraints: + /// + /// + /// + repeated Qualifier qualifiers = 1; + + /// + /// The category is a value that gives further meta information + /// w.r.t. to the class of the element. + /// It affects the expected existence of attributes and the applicability of + /// constraints. + /// + /// + /// The category is not identical to the semantic definition + /// () of an element. The category e.g. could denote that + /// the element is a measurement value whereas the semantic definition of + /// the element would denote that it is the measured temperature. + /// + optional string category = 2; + + /// + /// In case of identifiables this attribute is a short name of the element. + /// In case of referable this ID is an identifying string of the element within + /// its name space. + /// + /// + /// In case the element is a property and the property has a semantic definition + /// () conformant to IEC61360 + /// the is typically identical to the short name in English. + /// + optional string id_short = 3; + + /// + /// Identifier of a supplemental semantic definition of the element. + /// It is called supplemental semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + repeated Reference supplemental_semantic_ids = 4; + + /// + /// An extension of the element. + /// + repeated Extension extensions = 5; + + /// + /// Display name. Can be provided in several languages. + /// + repeated LangStringNameType display_name = 6; + + /// + /// Embedded data specification. + /// + repeated EmbeddedDataSpecification embedded_data_specifications = 7; + + /// + /// Description or comments on the element. + /// + /// + /// + /// The description can be provided in several languages. + /// + /// + /// If no description is defined, then the definition of the concept + /// description that defines the semantics of the element is used. + /// + /// + /// Additional information can be provided, e.g., if the element is + /// qualified and which qualifier types can be expected in which + /// context or which additional data specification templates are + /// provided. + /// + /// + repeated LangStringTextType description = 8; + + /// + /// Identifier of the semantic definition of the element. It is called semantic ID + /// of the element or also main semantic ID of the element. + /// + /// + /// It is recommended to use a global reference. + /// + optional Reference semantic_id = 9; + } + + /// + /// The semantics of a property or other elements that may have a semantic description + /// is defined by a concept description. + /// + /// + /// + /// The description of the concept should follow a standardized schema (realized as + /// data specification template). + /// + /// + /// Constraints: + /// + /// + /// + message ConceptDescription { + /// + /// The category is a value that gives further meta information + /// w.r.t. to the class of the element. + /// It affects the expected existence of attributes and the applicability of + /// constraints. + /// + /// + /// The category is not identical to the semantic definition + /// () of an element. The category e.g. could denote that + /// the element is a measurement value whereas the semantic definition of + /// the element would denote that it is the measured temperature. + /// + optional string category = 1; + + /// + /// Reference to an external definition the concept is compatible to or was derived + /// from. + /// + /// + /// + /// It is recommended to use a global reference. + /// + /// + /// Compare to is-case-of relationship in ISO 13584-32 & IEC EN 61360 + /// + /// + repeated Reference is_case_of = 2; + + /// + /// In case of identifiables this attribute is a short name of the element. + /// In case of referable this ID is an identifying string of the element within + /// its name space. + /// + /// + /// In case the element is a property and the property has a semantic definition + /// () conformant to IEC61360 + /// the is typically identical to the short name in English. + /// + optional string id_short = 3; + + /// + /// An extension of the element. + /// + repeated Extension extensions = 4; + + /// + /// Display name. Can be provided in several languages. + /// + repeated LangStringNameType display_name = 5; + + /// + /// Embedded data specification. + /// + repeated EmbeddedDataSpecification embedded_data_specifications = 6; + + /// + /// The globally unique identification of the element. + /// + string id = 7; + + /// + /// Description or comments on the element. + /// + /// + /// + /// The description can be provided in several languages. + /// + /// + /// If no description is defined, then the definition of the concept + /// description that defines the semantics of the element is used. + /// + /// + /// Additional information can be provided, e.g., if the element is + /// qualified and which qualifier types can be expected in which + /// context or which additional data specification templates are + /// provided. + /// + /// + repeated LangStringTextType description = 8; + + /// + /// Administrative information of an identifiable element. + /// + /// + /// Some of the administrative information like the version number might need to + /// be part of the identification. + /// + optional AdministrativeInformation administration = 9; + } + + /// + /// Reference types + /// + enum ReferenceTypes { + Referencetypes_UNSPECIFIED = 0; + + /// + /// External reference. + /// + Referencetypes_EXTERNAL_REFERENCE = 1; + + /// + /// Model reference. + /// + Referencetypes_MODEL_REFERENCE = 2; + } + + /// + /// Reference to either a model element of the same or another AAS or to an external + /// entity. + /// + /// + /// + /// A reference is an ordered list of keys. + /// + /// + /// A model reference is an ordered list of keys, each key referencing an element. The + /// complete list of keys may for example be concatenated to a path that then gives + /// unique access to an element. + /// + /// + /// An external reference is a reference to an external entity. + /// + /// + /// Constraints: + /// + /// + /// + message Reference { + /// + /// Unique references in their name space. + /// + repeated Key keys = 1; + + /// + /// Type of the reference. + /// + /// + /// Denotes, whether reference is an external reference or a model reference. + /// + ReferenceTypes type = 2; + + /// + /// of the referenced model element + /// ( = ). + /// + /// + /// + /// For external references there typically is no semantic ID. + /// + /// + /// It is recommended to use a external reference. + /// + /// + optional Reference referred_semantic_id = 3; + } + + /// + /// A key is a reference to an element by its ID. + /// + message Key { + /// + /// The key value, for example an IRDI or an URI + /// + string value = 1; + + /// + /// Denotes which kind of entity is referenced. + /// + /// + /// + /// In case = , + /// the key represents a reference to a source that can be globally identified. + /// + /// + /// In case = the key represents + /// a bookmark or a similar local identifier within its parent element as specified + /// by the key that precedes this key. + /// + /// + /// In all other cases the key references a model element of the same or of another AAS. + /// The name of the model element is explicitly listed. + /// + /// + KeyTypes type = 2; + } + + /// + /// Enumeration of different key value types within a key. + /// + enum KeyTypes { + Keytypes_UNSPECIFIED = 0; + + Keytypes_ANNOTATED_RELATIONSHIP_ELEMENT = 1; + + Keytypes_ASSET_ADMINISTRATION_SHELL = 2; + + Keytypes_BASIC_EVENT_ELEMENT = 3; + + Keytypes_BLOB = 4; + + Keytypes_CAPABILITY = 5; + + Keytypes_CONCEPT_DESCRIPTION = 6; + + /// + /// Data element. + /// + /// + /// Data Element is abstract, i.e. if a key uses + /// the reference may be a Property, a File etc. + /// + Keytypes_DATA_ELEMENT = 7; + + Keytypes_ENTITY = 8; + + /// + /// Event. + /// + /// + /// is abstract. + /// + Keytypes_EVENT_ELEMENT = 9; + + Keytypes_FILE = 10; + + /// + /// Bookmark or a similar local identifier of a subordinate part of + /// a primary resource + /// + Keytypes_FRAGMENT_REFERENCE = 11; + + Keytypes_GLOBAL_REFERENCE = 12; + + /// + /// Identifiable. + /// + /// + /// Identifiable is abstract, i.e. if a key uses “Identifiable” the reference + /// may be an Asset Administration Shell, a Submodel or a Concept Description. + /// + Keytypes_IDENTIFIABLE = 13; + + /// + /// Property with a value that can be provided in multiple languages + /// + Keytypes_MULTI_LANGUAGE_PROPERTY = 14; + + Keytypes_OPERATION = 15; + + Keytypes_PROPERTY = 16; + + /// + /// Range with min and max + /// + Keytypes_RANGE = 17; + + Keytypes_REFERABLE = 18; + + /// + /// Reference + /// + Keytypes_REFERENCE_ELEMENT = 19; + + /// + /// Relationship + /// + Keytypes_RELATIONSHIP_ELEMENT = 20; + + Keytypes_SUBMODEL = 21; + + /// + /// Submodel Element + /// + /// + /// Submodel Element is abstract, i.e. if a key uses + /// the reference may be a , an etc. + /// + Keytypes_SUBMODEL_ELEMENT = 22; + + /// + /// Struct of Submodel Elements + /// + Keytypes_SUBMODEL_ELEMENT_COLLECTION = 23; + + /// + /// List of Submodel Elements + /// + Keytypes_SUBMODEL_ELEMENT_LIST = 24; + } + + /// + /// Enumeration listing all XSD anySimpleTypes + /// + enum DataTypeDefXsd { + Datatypedefxsd_UNSPECIFIED = 0; + + Datatypedefxsd_ANY_URI = 1; + + Datatypedefxsd_BASE_64_BINARY = 2; + + Datatypedefxsd_BOOLEAN = 3; + + Datatypedefxsd_BYTE = 4; + + Datatypedefxsd_DATE = 5; + + Datatypedefxsd_DATE_TIME = 6; + + Datatypedefxsd_DECIMAL = 7; + + Datatypedefxsd_DOUBLE = 8; + + Datatypedefxsd_DURATION = 9; + + Datatypedefxsd_FLOAT = 10; + + Datatypedefxsd_G_DAY = 11; + + Datatypedefxsd_G_MONTH = 12; + + Datatypedefxsd_G_MONTH_DAY = 13; + + Datatypedefxsd_G_YEAR = 14; + + Datatypedefxsd_G_YEAR_MONTH = 15; + + Datatypedefxsd_HEX_BINARY = 16; + + Datatypedefxsd_INT = 17; + + Datatypedefxsd_INTEGER = 18; + + Datatypedefxsd_LONG = 19; + + Datatypedefxsd_NEGATIVE_INTEGER = 20; + + Datatypedefxsd_NON_NEGATIVE_INTEGER = 21; + + Datatypedefxsd_NON_POSITIVE_INTEGER = 22; + + Datatypedefxsd_POSITIVE_INTEGER = 23; + + Datatypedefxsd_SHORT = 24; + + Datatypedefxsd_STRING = 25; + + Datatypedefxsd_TIME = 26; + + Datatypedefxsd_UNSIGNED_BYTE = 27; + + Datatypedefxsd_UNSIGNED_INT = 28; + + Datatypedefxsd_UNSIGNED_LONG = 29; + + Datatypedefxsd_UNSIGNED_SHORT = 30; + } + + /// + /// String with length 128 maximum and minimum 1 characters and with language tags + /// + message LangStringNameType { + /// + /// Text in the + /// + string text = 1; + + /// + /// Language tag conforming to BCP 47 + /// + string language = 2; + } + + /// + /// String with length 1023 maximum and minimum 1 characters and with language tags + /// + message LangStringTextType { + /// + /// Text in the + /// + string text = 1; + + /// + /// Language tag conforming to BCP 47 + /// + string language = 2; + } + + /// + /// Container for the sets of different identifiables. + /// + /// + /// w.r.t. file exchange: There is exactly one environment independent on how many + /// files the contained elements are split. If the file is split then there + /// shall be no element with the same identifier in two different files. + /// + message Environment { + /// + /// Concept description + /// + repeated ConceptDescription concept_descriptions = 1; + + /// + /// Asset administration shell + /// + repeated AssetAdministrationShell asset_administration_shells = 2; + + /// + /// Submodel + /// + repeated Submodel submodels = 3; + } + + /// + /// Embed the content of a data specification. + /// + message EmbeddedDataSpecification { + /// + /// Reference to the data specification + /// + Reference data_specification = 1; + + /// + /// Actual content of the data specification + /// + DataSpecificationContent data_specification_content = 2; + } + + enum DataTypeIec61360 { + Datatypeiec61360_UNSPECIFIED = 0; + + /// + /// values containing a calendar date, conformant to ISO 8601:2004 Format yyyy-mm-dd + /// Example from IEC 61360-1:2017: "1999-05-31" is the [DATE] representation of: + /// "31 May 1999". + /// + Datatypeiec61360_DATE = 1; + + /// + /// values consisting of sequence of characters but cannot be translated into other + /// languages + /// + Datatypeiec61360_STRING = 2; + + /// + /// values containing string but shall be represented as different string in different + /// languages + /// + Datatypeiec61360_STRING_TRANSLATABLE = 3; + + /// + /// values containing values that are measure of type INTEGER. In addition such a value + /// comes with a physical unit. + /// + Datatypeiec61360_INTEGER_MEASURE = 4; + + /// + /// values containing values of type INTEGER but are no currencies or measures + /// + Datatypeiec61360_INTEGER_COUNT = 5; + + /// + /// values containing values of type INTEGER that are currencies + /// + Datatypeiec61360_INTEGER_CURRENCY = 6; + + /// + /// values containing values that are measures of type REAL. In addition such a value + /// comes with a physical unit. + /// + Datatypeiec61360_REAL_MEASURE = 7; + + /// + /// values containing numbers that can be written as a terminating or non-terminating + /// decimal; a rational or irrational number but are no currencies or measures + /// + Datatypeiec61360_REAL_COUNT = 8; + + /// + /// values containing values of type REAL that are currencies + /// + Datatypeiec61360_REAL_CURRENCY = 9; + + /// + /// values representing truth of logic or Boolean algebra (TRUE, FALSE) + /// + Datatypeiec61360_BOOLEAN = 10; + + /// + /// values containing values of type STRING conformant to Rfc 3987 + /// + /// + /// In IEC61360-1 (2017) only URI is supported. + /// An IRI type allows in particular to express an URL or an URI. + /// + Datatypeiec61360_IRI = 11; + + /// + /// values conforming to ISO/IEC 11179 series global identifier sequences + /// + /// + /// + /// IRDI can be used instead of the more specific data types ICID or ISO29002_IRDI. + /// + /// + /// ICID values are value conformant to an IRDI, where the delimiter between RAI and ID + /// is “#” while the delimiter between DI and VI is confined to “##” + /// + /// + /// ISO29002_IRDI values are values containing a global identifier that identifies an + /// administrated item in a registry. The structure of this identifier complies with + /// identifier syntax defined in ISO/TS 29002-5. The identifier shall fulfil the + /// requirements specified in ISO/TS 29002-5 for an "international registration data + /// identifier" (IRDI). + /// + /// + Datatypeiec61360_IRDI = 12; + + /// + /// values containing values of type rational + /// + Datatypeiec61360_RATIONAL = 13; + + /// + /// values containing values of type rational. In addition such a value comes with a + /// physical unit. + /// + Datatypeiec61360_RATIONAL_MEASURE = 14; + + /// + /// values containing a time, conformant to ISO 8601:2004 but restricted to what is + /// allowed in the corresponding type in xml. + /// + /// + /// + /// Format hh:mm (ECLASS) + /// + /// + /// Example from IEC 61360-1:2017: "13:20:00-05:00" is the [TIME] representation of: + /// 1.20 p.m. for Eastern Standard Time, which is 5 hours behind Coordinated + /// Universal Time (UTC). + /// + /// + Datatypeiec61360_TIME = 15; + + /// + /// values containing a time, conformant to ISO 8601:2004 but restricted to what is + /// allowed in the corresponding type in xml. + /// + /// + /// Format yyyy-mm-dd hh:mm (ECLASS) + /// + Datatypeiec61360_TIMESTAMP = 16; + + /// + /// values containing an address to a file. The values are of type URI and can represent + /// an absolute or relative path. + /// + /// + /// IEC61360 does not support the file type. + /// + Datatypeiec61360_FILE = 17; + + /// + /// Values containing string with any sequence of characters, using the syntax of HTML5 + /// (see W3C Recommendation 28:2014) + /// + Datatypeiec61360_HTML = 18; + + /// + /// values containing the content of a file. Values may be binaries. + /// + /// + /// + /// HTML conformant to HTML5 is a special blob. + /// + /// + /// In IEC61360 binary is for a sequence of bits, each bit being represented by “0” and + /// “1” only. A binary is a blob but a blob may also contain other source code. + /// + /// + Datatypeiec61360_BLOB = 19; + } + + /// + /// Value represented by up to four variants of a numeric value in a specific role: + /// MIN, NOM, TYP and MAX. True means that the value is available, + /// false means the value is not available. + /// + /// + /// + /// EXAMPLE from [IEC61360-1]: In the case of having a property which is + /// of the LEVEL_TYPE min/max − expressing a range − only those two values + /// need to be provided. + /// + /// + /// + /// This is how AAS deals with the following combinations of level types: + /// + /// + /// + /// + /// In the cases 2. and 4. the of the Property + /// or Properties within the needs to include + /// information about the level type. Otherwise, the semantics is not described + /// in a unique way. Please refer to the specification. + /// + /// + message LevelType { + /// + /// Maximum of the value + /// + bool max = 1; + + /// + /// Minimum of the value + /// + bool min = 2; + + /// + /// Nominal value (value as designated) + /// + bool nom = 3; + + /// + /// Value as typically present + /// + bool typ = 4; + } + + /// + /// A value reference pair within a value list. Each value has a global unique id + /// defining its semantic. + /// + message ValueReferencePair { + /// + /// The value of the referenced concept definition of the value in . + /// + string value = 1; + + /// + /// Global unique id of the value. + /// + /// + /// It is recommended to use a global reference. + /// + Reference value_id = 2; + } + + /// + /// A set of value reference pairs. + /// + message ValueList { + /// + /// A pair of a value together with its global unique id. + /// + repeated ValueReferencePair value_reference_pairs = 1; + } + + /// + /// String with length 255 maximum and minimum 1 characters and with language tags + /// + /// + /// It is advised to keep the length of the name limited to 35 characters. + /// + message LangStringPreferredNameTypeIec61360 { + /// + /// Text in the + /// + string text = 1; + + /// + /// Language tag conforming to BCP 47 + /// + string language = 2; + } + + /// + /// String with length 18 maximum and minimum 1 characters and with language tags + /// + message LangStringShortNameTypeIec61360 { + /// + /// Text in the + /// + string text = 1; + + /// + /// Language tag conforming to BCP 47 + /// + string language = 2; + } + + /// + /// String with length 1023 maximum and minimum 1 characters and with language tags + /// + message LangStringDefinitionTypeIec61360 { + /// + /// Text in the + /// + string text = 1; + + /// + /// Language tag conforming to BCP 47 + /// + string language = 2; + } + + /// + /// Content of data specification template for concept descriptions for properties, + /// values and value lists conformant to IEC 61360. + /// + /// + /// + /// IEC61360 requires also a globally unique identifier for a concept + /// description. This ID is not part of the data specification template. + /// Instead the as inherited via + /// is used. Same holds for administrative + /// information like the version and revision. + /// + /// + /// and are very + /// similar. However, in this case the decision was to add + /// explicitly to the data specification. Same holds for + /// and + /// . Same holds for + /// and . + /// + /// + /// Constraints: + /// + /// + /// + message DataSpecificationIec61360 { + /// + /// Value + /// + optional string value = 1; + + /// + /// Set of levels. + /// + optional LevelType level_type = 2; + + /// + /// Symbol + /// + optional string symbol = 3; + + /// + /// Preferred name + /// + /// + /// + /// It is advised to keep the length of the name limited to 35 characters. + /// + /// + /// Constraints: + /// + /// + /// + repeated LangStringPreferredNameTypeIec61360 preferred_name = 4; + + /// + /// Data Type + /// + optional DataTypeIec61360 data_type = 5; + + /// + /// Short name + /// + repeated LangStringShortNameTypeIec61360 short_name = 6; + + /// + /// Definition in different languages + /// + repeated LangStringDefinitionTypeIec61360 definition = 7; + + /// + /// Unit + /// + optional string unit = 8; + + /// + /// Value Format + /// + /// + /// The value format is based on ISO 13584-42 and IEC 61360-2. + /// + optional string value_format = 9; + + /// + /// Unique unit id + /// + /// + /// + /// and need to be consistent if both attributes + /// are set + /// + /// + /// It is recommended to use an external reference ID. + /// + /// + optional Reference unit_id = 10; + + /// + /// List of allowed values + /// + optional ValueList value_list = 11; + + /// + /// Source of definition + /// + optional string source_of_definition = 12; + } + + message DataSpecificationContent { + oneof value { + DataSpecificationIec61360 data_specification_iec_61360 = 1; + } + } + + message SubmodelElement { + oneof value { + RelationshipElement relationship_element = 1; + AnnotatedRelationshipElement annotated_relationship_element = 2; + BasicEventElement basic_event_element = 3; + Blob blob = 4; + Capability capability = 5; + Entity entity = 6; + File file = 7; + MultiLanguageProperty multi_language_property = 8; + Operation operation = 9; + Property property = 10; + Range range = 11; + ReferenceElement reference_element = 12; + SubmodelElementCollection submodel_element_collection = 13; + SubmodelElementList submodel_element_list = 14; + } + } + + message DataElement { + oneof value { + Blob blob = 1; + File file = 2; + MultiLanguageProperty multi_language_property = 3; + Property property = 4; + Range range = 5; + ReferenceElement reference_element = 6; + } + } + +/* + * This code has been automatically generated by aas-core-codegen. + * Do NOT edit or append. + */