Mismatch between the proposed information model and the implemented one #108
Replies: 0 comments 4 replies
-
The IDS Information Model defines how data assets should be described and how IDS participants (e.g. connector, broker) communicate with each other to share this information in a way both can understand - technology-independent. However, neither the RAM, nor the IDS-G declare using the RDF ontology for the technical implementation of all interfaces as mandatory. Why should they? How the technical realizations of non-IDS interfaces and data models of the components look like is a design decision - technology-dependent and maybe use case specific. And we, right from version 1.0.0, transparently communicated in all presentations, documentations, and support requests that the DSC is using a custom data model, that even has evolved over the last months (see here) - stored in a SQL database, and not in an RDF triple store. We, as the developers, agreed on that due to our observations and experiences in the deployment and interaction with our IDS connector reference implementation. The IDS Information Model can be hardly understood by developers and people without any IDS or RDF knowledge. This is why we decided to encapsulate the IDS overhead for the specified IDS component communication to provide an easy to understand REST API for dedicated systems that do not implement IDS. Nevertheless, we stick to IDS specifications when communicating within the IDS ecosystem.
Talking about standards, we are referring to the HTTP/1.1 specification defining how REST APIs should look like. See here. Using HATEOS, our REST API is following common OpenAPI specifications.
I don't see that people are not using this connector because of the implemented REST API as this follows common standards. On top of that, JSON is a well-known and widely used format for exchanging information. It is just our abstraction of the IDS RDF ontology, as it is e.g. also the JSON-LD created by the Infomodel library. The three topics database/data model, non-IDS interfaces, and IDS interfaces should not mix up. The IDS Infomodel, as described above, defines the latter. Everything else is a design decision. So you could of course declare our implementation as "wrong" - but there is no right or wrong.
This is not true. Each REST resource has a self-link that is the unique identifier of an object.
When creating an object via REST API, this is stored inside the database. While doing so, a uuid is created, that is the only one used for this object and at the same time part of the object's id. Using UUIDs as identifiers in large databases is best practice.
Thus, when an object is retrieved via IDS, the extracted That, first of all. Coming to your issue: In addition, the |
Beta Was this translation helpful? Give feedback.
-
Thanks for your very detailed answer. i.e. also interface i.e.
instead of
|
Beta Was this translation helpful? Give feedback.
-
If you want to provide data from So e.g. you set: "@type": "ids:Artifact",
"@id": "https://w3id.org/idsa/autogen/artifact/5c96b6f0-a698-4329-9f15-4913bf4e86f5", The artifact object will then be available at e.g. When creating an artifact via the REST endpoint, you need to set an
In addition: Pay attention to defining the right bootstrapping path in the ## Starting path for bootstrapping
bootstrap.path=./src/resources
bootstrap.enabled=false This was changed in v6.4.0 as part of a fix. Thus, the example bootstrapping files are not loaded when enabling this feature. |
Beta Was this translation helpful? Give feedback.
-
I agree, we could use the |
Beta Was this translation helpful? Give feedback.
-
Describe the bug
Currently, there is a mismatch between the proposed IDS information model based on RDF and the implemented one.
This mismatch generates great confusion as well as numerous bugs and errors.
The original IDS information model utilizes the Resource Description Framework to enable IDS participating users to describe their shared and consumed resources.
RDF is based on the usage of URIs and in the case of Semantic Web URLs.
RDF comes as a natural standard to be used in the IDS data model, allowing users to describe their shared services and databases so other users (machines or not) can better consume it.
Why use RDF? Because it is the standard language for doing so such as HTML is for writing Web-pages.
You can devise your own language for writing Webpages, but there is no propose if nobody will use it.
That said, there is a mismatch between the RDF principles and the interfaces implemented at the IDS Connector.
First and foremost, the IDS Connector in many places uses UUIDs instead of URLs to identify resources.
The main problem here is that URLs are the Web way of identifying resources and UUID are not part of it.
See the mismatch between the two interfaces below, one for registering Artifacts, another for consuming it:
The both interfaces above clarifies the issue with the current data model implemented by the IDS Connector.
While it the IDS data model uses RDF and URL's to define resources in one hand side, the IDS Connector implementation limits its usage by using UUIDs in the other hand side.
There is an undistinguishable difference between the UUIDs used by the IDS Connector data model to identify resources locally and the URLs used by the IDS data model to identify resources globally.
For instance, Mercedes-Benz connector publish Electric Vehicle Status data on the following intuitive URL: https://ids-dev.corpinter.net/mds/devportal/offers/electricVehicleStatus using Connector version 6.5.1.
However, the latest version forces the user to assign an arbitrary UUID to this URL (see error logs).
Another problem is that if happens that the URL has two UUIDs by chance, the connector can use the wrong one for identification.
Last but not the least, a further argument to abandon the use of UUIDs in the APIs is that, different from URLs, they are not unique (https://towardsdatascience.com/are-uuids-really-unique-57eb80fc2a87).
In this reported issue, I strongly suggest using UUIDs only in case of automatically generated URLs, but abandon completely its use for identifying resources, adopting RDF on its plenitude, using URLs for identifying and retrieving resources (artifacts, catalogs, etc).
Further, the APIs should receive the full resource identifier URLs/URIs and not a substring generated by an arbitrary method.
To Reproduce
Expected behavior
Use URLs internally as well as in the APIs, always passing the resource URL or URI and not a manual/automatic generated substring.
Screenshots & Logs
Error bootstraping an Artifact without UUID
Check line 74 in UUIDUtils: at io.dataspaceconnector.common.util.UUIDUtils.uuidFromUri(UUIDUtils.java:74)
Trying to register Artifact to a Broker (UUID created manually in bootstrap)
Beta Was this translation helpful? Give feedback.
All reactions