Lehrstuhl für Informations- und Automatisierungssysteme issueshttps://git.rwth-aachen.de/groups/acplt/-/issues2021-01-12T13:34:55+01:00https://git.rwth-aachen.de/acplt/pyi40aas/-/issues/108aasx.writer: Add function for writing a complete object store and file store ...2021-01-12T13:34:55+01:00Torben Minyaasx.writer: Add function for writing a complete object store and file store into an AASX-file as a convenience functionhttps://git.rwth-aachen.de/acplt/pyi40aas/-/issues/109read_aas_json_file(file) supports only file-like object2021-10-31T23:26:01+01:00Igor Garmaevread_aas_json_file(file) supports only file-like object`read_aas_json_file(file: IO, **kwargs)` in json_deserialization.py currently supports only file-like objects, but it should also support filenames`read_aas_json_file(file: IO, **kwargs)` in json_deserialization.py currently supports only file-like objects, but it should also support filenamesStable library APIhttps://git.rwth-aachen.de/acplt/pyi40aas/-/issues/112adapter: Allow passing a list of Identifiable objects to be ignored to read_a...2021-01-12T13:38:29+01:00Michael Thiesadapter: Allow passing a list of Identifiable objects to be ignored to read_aas_*_file()This feature is required by the AASXReader to silently ignore objects that are serialized redundantly in different formats (XML / JSON).
It should be implemented as an additional optional parameter, taking a `Set[Identifier]`.This feature is required by the AASXReader to silently ignore objects that are serialized redundantly in different formats (XML / JSON).
It should be implemented as an additional optional parameter, taking a `Set[Identifier]`.https://git.rwth-aachen.de/acplt/pyi40aas/-/issues/114Update to Version 3.0RC012021-01-12T13:34:29+01:00Torben MinyUpdate to Version 3.0RC01The following changes have been made compared to version 2.0.1:
- Strings must not be empty
- Constraints are now included in the respective class descriptions (Go through here, what is missing in our implementation)
- AssetIdentificatio...The following changes have been made compared to version 2.0.1:
- Strings must not be empty
- Constraints are now included in the respective class descriptions (Go through here, what is missing in our implementation)
- AssetIdentificationModel was added to the AAS
- ConceptDictionaries were removed
- SemanticID only optional
- Key.local was removed
- Entity.asset => Entity.globalAssetId and Entity.externalAssetId
- New classes Extension, HasExtension, IdentifierKeyValuePair
- DisplayName for referables introduced
- allowDuplicates in SMC is now clarified: Allow duplicates of semanticIdsTorben MinyTorben Minyhttps://git.rwth-aachen.de/acplt/pyi40aas/-/issues/116JSON schema: missing DataElement type2021-04-10T17:34:32+02:00Leon Mauritz MöllerJSON schema: missing DataElement typeThe JSON schema currently doesn't have any type for `DataElement`s. We suggest to add this missing type, so schema validators can spot incorrectly placed `SubmodelElement`s, e.g. where a `DataElement` is expected.
Additionally, the XML...The JSON schema currently doesn't have any type for `DataElement`s. We suggest to add this missing type, so schema validators can spot incorrectly placed `SubmodelElement`s, e.g. where a `DataElement` is expected.
Additionally, the XML Schema Definition has such a type, so adding this type would improve the consistency between the two schemas.
forwarded to DotAAS-Group: [Issue 21](https://github.com/admin-shell-io/aas-specs/issues/21)Leon Mauritz MöllerLeon Mauritz Möllerhttps://git.rwth-aachen.de/acplt/pyi40aas/-/issues/117model: Implement Constraint AASd-003: idShort shall be compared case-insensitive2021-01-12T13:33:24+01:00Michael Thiesmodel: Implement Constraint AASd-003: idShort shall be compared case-insensitiveThis can be implemented by adding a `.lower()` to the idShort in all places in `NamespaceSet` where the idShort is used as key for the internal dict, including item access, `.get()`, item deletion and item insertion.This can be implemented by adding a `.lower()` to the idShort in all places in `NamespaceSet` where the idShort is used as key for the internal dict, including item access, `.get()`, item deletion and item insertion.Torben MinyTorben Minyhttps://git.rwth-aachen.de/acplt/pyi40aas/-/issues/118model: Implement Constraint AASd-026: check for duplicate semanticID in Colle...2021-01-12T13:33:19+01:00Michael Thiesmodel: Implement Constraint AASd-026: check for duplicate semanticID in Collections with allowDuplicates=falseSooner or later, we need to implement some look-up mechanism for SubmodelElements by semanticId to provide the relevant API methods. When we implemented this, we can use it to check the constraint as well.
In conjunction with #121Sooner or later, we need to implement some look-up mechanism for SubmodelElements by semanticId to provide the relevant API methods. When we implemented this, we can use it to check the constraint as well.
In conjunction with #121Torben MinyTorben Minyhttps://git.rwth-aachen.de/acplt/pyi40aas/-/issues/120aasx.writer: Add searching and adding referenced ConceptDescriptions to write...2021-01-12T13:38:58+01:00Michael Thiesaasx.writer: Add searching and adding referenced ConceptDescriptions to write_aashttps://git.rwth-aachen.de/acplt/pyi40aas/-/issues/121model: Implement CustomSet() with Objekts unique by definied attribute2021-01-12T13:32:15+01:00Torben Minymodel: Implement CustomSet() with Objekts unique by definied attributeFor HasExtension and Qualifiable custom sets are needed that contain objects that are unique based on an attribute.
The sets have to be similar to the namespace set, which contains referable objects unique by idshort.
Maybe there is an...For HasExtension and Qualifiable custom sets are needed that contain objects that are unique based on an attribute.
The sets have to be similar to the namespace set, which contains referable objects unique by idshort.
Maybe there is an elegant way to make it generic, so that dublicated code can be avoid.
In conjunction with #118Torben MinyTorben Minyhttps://git.rwth-aachen.de/acplt/pyi40aas/-/issues/122XSD: change `xs:sequence` to `xs:all`2021-01-20T11:08:21+01:00Leon Mauritz MöllerXSD: change `xs:sequence` to `xs:all`The XSD currently uses `xs:sequence` to define attributes of types. This requires the children of elements in XML documents to be in the exact same order as defined in the XSD, which results in the unnecessary work of re-ordering code-bl...The XSD currently uses `xs:sequence` to define attributes of types. This requires the children of elements in XML documents to be in the exact same order as defined in the XSD, which results in the unnecessary work of re-ordering code-blocks in serialization adapters, as seen in !67. Changing `xs:sequence` to `xs:all` would remove this limitation, allowing children in any order to be valid against the schema.
On the other hand I could see why you would want a certain order of elements. For example when manually inspecting XML documents (which can get quite large), a fixed order of elements would make objects easier to grasp.
But then again, you would most likely use XPath or good XML viewers to view such documents anyways.
What's your opinion on this?
forwarded to DotAAS-Group: [Issue 20](https://github.com/admin-shell-io/aas-specs/issues/20)https://git.rwth-aachen.de/acplt/pyi40aas/-/issues/124model: Fix docstring of AASReference.__init__ w.r.t. to target_type parameter2021-10-28T21:12:49+02:00Igor Garmaevmodel: Fix docstring of AASReference.__init__ w.r.t. to target_type parameterDelete `target_type` parameter in `__init__` of `AASReference`. Use for `type` type of last element of `key`.
If it is not possible, please fix doc of `__init__`: replace "type_" with "target_type"Delete `target_type` parameter in `__init__` of `AASReference`. Use for `type` type of last element of `key`.
If it is not possible, please fix doc of `__init__`: replace "type_" with "target_type"https://git.rwth-aachen.de/acplt/pyi40aas/-/issues/126model: Add Iterable[...] with correct specialization as base class of Namespa...2021-01-12T13:30:48+01:00Michael Thiesmodel: Add Iterable[...] with correct specialization as base class of Namespace and inheriting classeshttps://git.rwth-aachen.de/acplt/pyi40aas/-/issues/128Add reprs for classes GDay, GMonth, GMonthDay, GYearMonth, GYear2021-01-25T14:25:23+01:00Igor GarmaevAdd reprs for classes GDay, GMonth, GMonthDay, GYearMonth, GYearAdd reprs for classes GDay, GMonth, GMonthDay, GYearMonth, GYear in model/datatypes.pyAdd reprs for classes GDay, GMonth, GMonthDay, GYearMonth, GYear in model/datatypes.pyhttps://git.rwth-aachen.de/acplt/pyi40aas/-/issues/129Add remove_file() in AbstractSupplementaryFileContainer class2021-01-25T14:41:25+01:00Igor GarmaevAdd remove_file() in AbstractSupplementaryFileContainer classAdd function `remove_file(self, name: str)` to the class `AbstractSupplementaryFileContainer` as it needs a functionality to delete files that are already placed in a container.Add function `remove_file(self, name: str)` to the class `AbstractSupplementaryFileContainer` as it needs a functionality to delete files that are already placed in a container.https://git.rwth-aachen.de/acplt/pyi40aas/-/issues/130Add property.setter for attributes of type NamespaceSet2021-01-25T16:24:07+01:00Igor GarmaevAdd property.setter for attributes of type NamespaceSetAll classes that inherit from class Namespace should have property.setter for each NamespaceSet attribute, so that each NamespaceSet attribute can be set with iterable object.
Example:
```
shell = AssetAdministrationShell(asset, identif...All classes that inherit from class Namespace should have property.setter for each NamespaceSet attribute, so that each NamespaceSet attribute can be set with iterable object.
Example:
```
shell = AssetAdministrationShell(asset, identification)
...
shell.view = [view1, view2, view3]
...
shell.view = (view1, view2)
```https://git.rwth-aachen.de/acplt/pyi40aas/-/issues/131examples: These tutorials need updating2021-01-27T14:10:14+01:00Sebastian Heppners.heppner@iat.rwth-aachen.deexamples: These tutorials need updating- [ ] `tutorial_dynamic_model`: does not exist
- [ ] `docs/source/tutorials/tutorial_serialization_deserialization.rst`: Fix missing link to `tutorial_dynamic_model`
- [ ] `tutorial_create_simple_aas`: Introduction is outdated
- [ ] `tut...- [ ] `tutorial_dynamic_model`: does not exist
- [ ] `docs/source/tutorials/tutorial_serialization_deserialization.rst`: Fix missing link to `tutorial_dynamic_model`
- [ ] `tutorial_create_simple_aas`: Introduction is outdated
- [ ] `tutorial_serialization_deserialization`: Step 1 is outdated
One problem, that we currently have with the tutorials, is that we have to maintain two versions. Firstly, the `examples.tutorial` python modules and secondly the `docs/source/tutorials/*.rst` restructured text files. When we begin to host the documentation, I would propose we only keep the restructured text ones.https://git.rwth-aachen.de/acplt/pyi40aas/-/issues/133model: Uniqueness checks are not functional2021-02-22T09:59:23+01:00Leon Mauritz Möllermodel: Uniqueness checks are not functional`Referable.update_from()` patches the `self` object with the `other` object by iterating over the attributes of the `other` objects using the python built-in `vars()`. `vars()` only iterates over an objects attributes, not properties e.g...`Referable.update_from()` patches the `self` object with the `other` object by iterating over the attributes of the `other` objects using the python built-in `vars()`. `vars()` only iterates over an objects attributes, not properties e.g. getter/setter functions. The `id_short` attribute of `Referable` is a property, which performs additional checks when setting the `id_short`, such as checking for uniqueness within the namespace by searching the objects contained in the `parent` object. The actual value of the `id_short` is stored in the protected attribute `_id_short`.
Since `_id_short` is an attribute and `id_short` is a property, the `vars()` built-in returns the `_id_short` attribute instead of the `id_short` property, which causes `update_from()` to update the `_id_short` directly, skipping the setter function and thus the uniqueness check.
This is also the case for the `semantic_id` property of `HasSemantics`, which also checks for uniqueness.
A solution proposed by @sebastian.heppner and @mhthies is to add dictionaries to each class, mapping the protected attributes to the respective property. These dictionaries would then be searched by `update_from()`, which can then set the property instead of the attribute.
---
Another issue is that this uniqueness check is not performed for objects contained in one or more `AbstractObjectStore`, because these are not referenced by the `parent` attribute.
---
The third and final issue is located in `NamespaceSet.update_nss_from()`. [...]
---
Each fix has to be backported to the not yet existent `V2.0` branch.
**Progress Tracker:**
- [ ] Uniqueness not checked in `Referable.update_from()`
- [ ] No uniqueness check for objects inside an `AbstractObjectStore`
- [ ] `NamespaceSet.update_nss_from()`https://git.rwth-aachen.de/acplt/pyi40aas/-/issues/134NamespaceSet: update_nss_from() on V30RC01 does not update Qualifiers and Ext...2021-02-22T12:25:17+01:00Michael ThiesNamespaceSet: update_nss_from() on V30RC01 does not update Qualifiers and Extensions correctlyThis issue is only relevant for the V30RC01 branch.
In the current version of the improve/V30RC01-branch, the `update_nss_from()` method of NamespaceSets does not consider Qualifiers and Extensions correctly. If a Referable object with ...This issue is only relevant for the V30RC01 branch.
In the current version of the improve/V30RC01-branch, the `update_nss_from()` method of NamespaceSets does not consider Qualifiers and Extensions correctly. If a Referable object with Qualifiers or Extensions is updated from another Referable object, only new and deleted Qualifiers/Extensions will be updated, whereas changed Qualifiers/Extensions are not updated. This is due to the missing code in `base.py` near line 1477: https://git.rwth-aachen.de/acplt/pyi40aas/-/blob/6711a5bb3f9d951e59d3c4311600b1b5a6413bd1/aas/model/base.py#L1477
Since Qualifiers and Extensions are not Referable and thus have no `update_from()` method, we cannot update them recursively. Instead, we should just replace the old objects with the new ones. In fact, this simplyfies the whole `update_nss_from()` behaviour: We don't have to divide into new, deleted and update Qualifiers/Extensions, but instead, we can simply remove all of these objects from `self` and move all of the ones from `other` into `self`. Thus, I propose to add a high-level `if` statement, that checks if the NamespaceSet uses the `id_short` attribute for identification: If it does, we can use the old behaviour of `update_nss_from()` (we don't even need to check the type of the objects), if not, we should use the simplified updating (deleting and moving).Leon Mauritz MöllerLeon Mauritz Möllerhttps://git.rwth-aachen.de/acplt/pyi40aas/-/issues/139Could not load example from Compliance Tool in AASX package explorer2021-05-31T08:06:05+02:00Yannik MerschCould not load example from Compliance Tool in AASX package explorerOpening the example from the Compliance tool crashes the package explorer without error message. Drag and drop creates the following error message:
Version from package explorer tested:
- v2021-05-02.alpha
- v2021-02-25.alpha
```
Error...Opening the example from the Compliance tool crashes the package explorer without error message. Drag and drop creates the following error message:
Version from package explorer tested:
- v2021-05-02.alpha
- v2021-02-25.alpha
```
Error: while receiving file drop to window: PackageCentral: while performing load from C:\...\example.xml at \PackageCentral.cs:Zeile 96. gave: Mindestens ein Fehler ist aufgetreten. PackageCentral: while performing load from C:\...\example.xml at \PackageCentral.cs:Zeile 96. gave: Mindestens ein Fehler ist aufgetreten.
InnerException: Mindestens ein Fehler ist aufgetreten.
InnerException: While opening aasx C:\...\example.xml from source local file: C:\...\example.xml at \AdminShellPackageEnv.cs:Zeile 257. gave: While reading AAS C:\...\example.xml at \AdminShellPackageEnv.cs:Zeile 250. gave: Type error for XML file at bei AasxWpfControlLibrary.PackageCentral.PackageCentralItem.Load(PackageCentral packageCentral, String location, String fullItemLocation, Boolean overrideLoadResident, PackageContainerOptionsBase containerOptions, PackCntRuntimeOptions runtimeOptions) in D:\a\aasx-package-explorer\aasx-package-explorer\src\AasxWpfControlLibrary\PackageCentral\PackageCentral.cs:Zeile 105.
bei AasxPackageExplorer.MainWindow.UiLoadPackageWithNew(PackageCentralItem packItem, AdminShellPackageEnv takeOverEnv, String loadLocalFilename, String info, Boolean onlyAuxiliary, Boolean doNotNavigateAfterLoaded, PackageContainerBase takeOverContainer, String storeFnToLRU) in D:\a\aasx-package-explorer\aasx-package-explorer\src\AasxPackageExplorer\MainWindow.xaml.cs:Zeile 222.
bei AasxPackageExplorer.MainWindow.Window_Drop(Object sender, DragEventArgs e) in D:\a\aasx-package-explorer\aasx-package-explorer\src\AasxPackageExplorer\MainWindow.xaml.cs:Zeile 1970..
```
[example.aasx](/uploads/d28b67aa12114ccdf49912f46ac0f1ee/example.aasx)
[example.xml](/uploads/a0fdc7195ad86e97ff8b515818f736b5/example.xml)https://git.rwth-aachen.de/acplt/pyi40aas/-/issues/141Does compliance_tool check consistency between model.Reference's value and id...2021-07-08T08:16:48+02:00Ghost UserDoes compliance_tool check consistency between model.Reference's value and id_type?example_aas.py
It seems that the semantic_id of "ManufactureName" has reference to ELCASS.
But the code in example_aas.py uses IRI instead of IRDI for its id_type.
Do you think this kind of inconsistency can be detected by the compl...example_aas.py
It seems that the semantic_id of "ManufactureName" has reference to ELCASS.
But the code in example_aas.py uses IRI instead of IRDI for its id_type.
Do you think this kind of inconsistency can be detected by the complience_tool?
semantic_id=model.Reference((model.Key(type_=model.KeyElements.GLOBAL_REFERENCE,
local=False,
value='0173-1#02-AAO677#002',
id_type=model.KeyType.IRI),)), <--- should be IRDI