Replies: 7 comments
-
Maybe a better (not correct syntax); {
"@context": {
"@version": 1.1,
"rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
"cim": "http://iec.ch/TC57/CIM100#",
"md": "http://iec.ch/TC57/61970-552/ModelDescription/1#",
"eu": "http://iec.ch/TC57/CIM100-European#",
"dm": "http://iec.ch/TC57/61970-552/DifferenceModel/1#",
"dm:DifferenceModel": {
"@id": "urn:uuid:f52f12c3-db10-4d41-a9f2-b1fe29ab4d6d",
"@container": ["@graph", "@id"]
}
},
"dm:DifferenceModel": {
"@none": [{
"@id": "urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d9",
"@type": "cim:ACLineSegment",
"cim:Conductor.length": {
"cim:Length.value": 50.0
}
}, {
"@id": "urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d9",
"@type": "cim:ACLineSegment",
"cim:Conductor.length": {
"cim:Length.value": 55.0
}
}]
}
} |
Beta Was this translation helpful? Give feedback.
-
My team like this idea but there are some issues we discussed internally that needs to be addressed Both alternatives have array for @graph, reverseDifferences and forwardDifferences. What is allowed to do. Depends also on what the header is ment to provide. If the header is ment to provie timestamp you will have issues if you include more than 1 difference to the same object (ACLineSegment @id) in the same message. You will also have issues if you send more than one difference object (difference @id) in the same message since they are most likely not executed at the same timestamp. The main difference between the first alternativ and the second is that the second can have its own id for both reverse and forward but then it also should have its own timestamp? The second option have its onw ids, but you don't have a relation between the reverse and forward anymore. So what can be done and what can not. What must be enforced?
Examples:Option1 (Which change is the latest one?):{
"@context": {
"rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
"cim": "http://iec.ch/TC57/CIM100#",
"md": "http://iec.ch/TC57/61970-552/ModelDescription/1#",
"eu": "http://iec.ch/TC57/CIM100-European#",
"dm": "http://iec.ch/TC57/61970-552/DifferenceModel/1#"
},
"@graph": [
{
"@id": "urn:uuid:f52f12c3-db10-4d41-a9f2-b1fe29ab4d6d",
"@type": "dm:DifferenceModel",
"dm:reverseDifferences": [
{
"@id": "urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d9",
"@type": "cim:ACLineSegment",
"cim:Conductor.length": {
"cim:Length.value": 50.0
}
},
{
"@id": "urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d5",
"@type": "cim:Switch",
"cim:IdentifiedObject.Name": "Switch1"
}
],
"dm:forwardDifferences": [
{
"@id": "urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d9",
"@type": "cim:ACLineSegment",
"cim:Conductor.length": {
"cim:Length.value": 55.0
}
},
{
"@id": "urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d5",
"@type": "cim:Switch",
"cim:IdentifiedObject.Name": "Switch2"
}
]
},
{
"@id": "urn:uuid:f52f12c3-db10-4d41-a9f2-b1fe29ab4d6a",
"@type": "dm:DifferenceModel",
"dm:reverseDifferences": [
{
"@id": "urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d9",
"@type": "cim:ACLineSegment",
"cim:Conductor.length": {
"cim:Length.value": 60.0
}
}
],
"dm:forwardDifferences": [
{
"@id": "urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d9",
"@type": "cim:ACLineSegment",
"cim:Conductor.length": {
"cim:Length.value": 65.0
}
}
]
}
]
} Option2 (Which change is the latest one and which forward is connected to which reversed?):{
"@context": {
"rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
"cim": "http://iec.ch/TC57/CIM100#",
"md": "http://iec.ch/TC57/61970-552/ModelDescription/1#",
"eu": "http://iec.ch/TC57/CIM100-European#",
"dm": "http://iec.ch/TC57/61970-552/DifferenceModel/1#"
},
"@graph": [
{
"@id": "urn:uuid:f52f12c3-db10-4d41-a9f2-b1fe29ab4d6d",
"@type": "dm:DifferenceModel",
"dm:reverseDifferences": [
{
"@id": "urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d9",
"@type": "cim:ACLineSegment",
"cim:Conductor.length": {
"cim:Length.value": 50.0
}
},
{
"@id": "urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d5",
"@type": "cim:Switch",
"cim:IdentifiedObject.Name": "Switch1"
}
]
},
{
"@id": "urn:uuid:f1aa3e3a-8391-4bf9-b435-6bd0702f9e0d",
"@type": "dm:DifferenceModel",
"dm:forwardDifferences": [
{
"@id": "urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d9",
"@type": "cim:ACLineSegment",
"cim:Conductor.length": {
"cim:Length.value": 55.0
}
},
{
"@id": "urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d5",
"@type": "cim:Switch",
"cim:IdentifiedObject.Name": "Switch2"
}
]
},
{
"@id": "urn:uuid:f52f12c3-db10-4d41-a9f2-b1fe29ab4d6t",
"@type": "dm:DifferenceModel",
"dm:reverseDifferences": [
{
"@id": "urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d9",
"@type": "cim:ACLineSegment",
"cim:Conductor.length": {
"cim:Length.value": 60.0
}
}
]
},
{
"@id": "urn:uuid:f1aa3e3a-8391-4bf9-b435-6bd0702f9e0ru",
"@type": "dm:DifferenceModel",
"dm:forwardDifferences": [
{
"@id": "urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d9",
"@type": "cim:ACLineSegment",
"cim:Conductor.length": {
"cim:Length.value": 65.0
}
}
]
}
]
} |
Beta Was this translation helpful? Give feedback.
-
Very important! The difference model are not meant to replace audit-trail inside an application. It is also not intended to track changes that is related to activity. We are focus on the exchange of structure data in a digital twin.
It must be possible to exchange any "droddeling" changes - particularly just adding stuff. The header of the difference model should follow the same header as any dataset. However, one instance of the DifferenceModel dataset can only change one dataset, e.g. if EQ is exchange as one dataset including EQ-Core, EQ-ShortCircute the difference model dataset can include changes to data that confirms to both set. A DifferenceModel dataset can only include two graph (ForwardModel and ReversModel). It include the net change from the previous exchange (or generated) model. However, there can be different version of the difference model. In this case the resolving model version will be different. For a Compound (e.g. Money) all the element must be include in both the reverse and forward model.
Yes, all changes to the same component can be handle in the same dataset.
Yes, if the changes should be applied to the same model. E.g. Switch A might be installed on a different time than Switch B, but they are both part of an update to the Power System model that does not require separate analysis. All changes are considered a set of changes - However, a given set can consist of only one change. We are exchanging all the relevant changes that belongs together.
If we are looking at the future we can make update to the same dataset (with separate version), but if changes applied to the as-built there must be send separately even if the changes was infarct made at the same time.
The dataset shall include both forward and reverse model (and only those), but one of them can be empty. For a class to be deleted it needs to include all the attribute that has values. This will be specified in the upcoming 61970-553 and not -552 Relevant rules from 61970-600-1:
EQ (all of them), DY, GL and DL and boundary can be updated with difference model. SSH, TP and SV cannot. |
Beta Was this translation helpful? Give feedback.
-
Hi @Sveino and @ThomasRanvikEriksen ! I think the original proposal (to add So you need to capture the "difference model" in the abstract RDF representation. I think the best (only?) way is to use graphs:
Do you agree? If you think about it this way, then it's easy to show representations in the different serializations.
|
Beta Was this translation helpful? Give feedback.
-
Hi @Sveino and @ThomasRanvikEriksen !
option1<urn:uuid:f52f12c3-db10-4d41-a9f2-b1fe29ab4d6d>
rdf:type dm:DifferenceModel ;
dm:forwardDifferences <urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d5> , <urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d9> ;
dm:reverseDifferences <urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d5> , <urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d9> .
<urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d5>
rdf:type cim:Switch ;
cim:IdentifiedObject.Name "Switch1" , "Switch2" .
<urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d9>
rdf:type cim:ACLineSegment ;
cim:Conductor.length [ cim:Length.value 60 ] ;
cim:Conductor.length [ cim:Length.value 65 ] ;
cim:Conductor.length [ cim:Length.value 50 ] ;
cim:Conductor.length [ cim:Length.value 55 ] .
<urn:uuid:f52f12c3-db10-4d41-a9f2-b1fe29ab4d6a>
rdf:type dm:DifferenceModel ;
dm:forwardDifferences <urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d9> ;
dm:reverseDifferences <urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d9> . option2<urn:uuid:f52f12c3-db10-4d41-a9f2-b1fe29ab4d6d>
rdf:type dm:DifferenceModel ;
dm:reverseDifferences <urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d5> , <urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d9> .
<urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d5>
rdf:type cim:Switch ;
cim:IdentifiedObject.Name "Switch2" , "Switch1" .
<urn:uuid:f52f12c3-db10-4d41-a9f2-b1fe29ab4d6t>
rdf:type dm:DifferenceModel ;
dm:reverseDifferences <urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d9> .
<urn:uuid:f1aa3e3a-8391-4bf9-b435-6bd0702f9e0ru>
rdf:type dm:DifferenceModel ;
dm:forwardDifferences <urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d9> .
<urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d9>
rdf:type cim:ACLineSegment ;
cim:Conductor.length [ cim:Length.value 65 ] ;
cim:Conductor.length [ cim:Length.value 60 ] ;
cim:Conductor.length [ cim:Length.value 55 ] ;
cim:Conductor.length [ cim:Length.value 50 ] .
<urn:uuid:f1aa3e3a-8391-4bf9-b435-6bd0702f9e0d>
rdf:type dm:DifferenceModel ;
dm:forwardDifferences <urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d5> , <urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d9> . |
Beta Was this translation helpful? Give feedback.
-
I think more easily in trig than jsonld, so I made a corrected example in trig, then converted to jsonld:
option3 in trig<urn:uuid:base-model> a dm:Model.
<urn:uuid:base-model> {
<urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d5>
rdf:type cim:Switch ;
cim:IdentifiedObject.Name "Switch1".
<urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d9>
rdf:type cim:ACLineSegment ;
cim:Conductor.length [ cim:Length.value 50 ] .
}
<urn:uuid:f52f12c3-db10-4d41-a9f2-b1fe29ab4d6d> a dm:DifferenceModel ;
md:Model.Supersedes <urn:uuid:base-model>;
dm:forwardDifferences <urn:uuid:f52f12c3-db10-4d41-a9f2-b1fe29ab4d6d-forward>;
dm:reverseDifferences <urn:uuid:f52f12c3-db10-4d41-a9f2-b1fe29ab4d6d-reverse>.
<urn:uuid:f52f12c3-db10-4d41-a9f2-b1fe29ab4d6d-reverse> {
<urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d9> cim:Conductor.length [ cim:Length.value 50 ] .
<urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d5> cim:IdentifiedObject.Name "Switch1" .
}
<urn:uuid:f52f12c3-db10-4d41-a9f2-b1fe29ab4d6d-forward> {
<urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d9> cim:Conductor.length [ cim:Length.value 55 ] .
<urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d5> cim:IdentifiedObject.Name "Switch2" .
}
<urn:uuid:f52f12c3-db10-4d41-a9f2-b1fe29ab4d6a> a dm:DifferenceModel ;
md:Model.Supersedes <urn:uuid:f52f12c3-db10-4d41-a9f2-b1fe29ab4d6d>;
dm:reverseDifferences <urn:uuid:f52f12c3-db10-4d41-a9f2-b1fe29ab4d6a-reverse>;
dm:forwardDifferences <urn:uuid:f52f12c3-db10-4d41-a9f2-b1fe29ab4d6a-forward>.
<urn:uuid:f52f12c3-db10-4d41-a9f2-b1fe29ab4d6a-reverse> {
<urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d9> cim:Conductor.length [ cim:Length.value 60 ]
}
<urn:uuid:f52f12c3-db10-4d41-a9f2-b1fe29ab4d6a-forward> {
<urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d9> cim:Conductor.length [ cim:Length.value 65 ]
} option 3 in jsonld{
"@graph": [
{
"@id": "urn:uuid:base-model",
"@type": "dm:Model",
"@graph": [
{
"@id": "urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d9",
"cim:Conductor.length": {
"@id": "_:b4"
},
"@type": "cim:ACLineSegment"
},
{
"@id": "_:b4",
"cim:Length.value": {
"@value": "50",
"@type": "http://www.w3.org/2001/XMLSchema#integer"
}
},
{
"@id": "urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d5",
"cim:IdentifiedObject.Name": "Switch1",
"@type": "cim:Switch"
}
]
},
{
"@id": "urn:uuid:f52f12c3-db10-4d41-a9f2-b1fe29ab4d6a",
"dm:forwardDifferences": {
"@id": "urn:uuid:f52f12c3-db10-4d41-a9f2-b1fe29ab4d6a-forward"
},
"dm:reverseDifferences": {
"@id": "urn:uuid:f52f12c3-db10-4d41-a9f2-b1fe29ab4d6a-reverse"
},
"md:Model.Supersedes": {
"@id": "urn:uuid:f52f12c3-db10-4d41-a9f2-b1fe29ab4d6d"
},
"@type": "dm:DifferenceModel"
},
{
"@id": "urn:uuid:f52f12c3-db10-4d41-a9f2-b1fe29ab4d6a-forward",
"@graph": [
{
"@id": "urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d9",
"cim:Conductor.length": {
"@id": "_:b2"
}
},
{
"@id": "_:b2",
"cim:Length.value": {
"@value": "65",
"@type": "http://www.w3.org/2001/XMLSchema#integer"
}
}
]
},
{
"@id": "urn:uuid:f52f12c3-db10-4d41-a9f2-b1fe29ab4d6a-reverse",
"@graph": [
{
"@id": "_:b1",
"cim:Length.value": {
"@value": "60",
"@type": "http://www.w3.org/2001/XMLSchema#integer"
}
},
{
"@id": "urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d9",
"cim:Conductor.length": {
"@id": "_:b1"
}
}
]
},
{
"@id": "urn:uuid:f52f12c3-db10-4d41-a9f2-b1fe29ab4d6d",
"dm:reverseDifferences": {
"@id": "urn:uuid:f52f12c3-db10-4d41-a9f2-b1fe29ab4d6d-reverse"
},
"dm:forwardDifferences": {
"@id": "urn:uuid:f52f12c3-db10-4d41-a9f2-b1fe29ab4d6d-forward"
},
"md:Model.Supersedes": {
"@id": "urn:uuid:base-model"
},
"@type": "dm:DifferenceModel"
},
{
"@id": "urn:uuid:f52f12c3-db10-4d41-a9f2-b1fe29ab4d6d-reverse",
"@graph": [
{
"@id": "_:b0",
"cim:Length.value": {
"@value": "50",
"@type": "http://www.w3.org/2001/XMLSchema#integer"
}
},
{
"@id": "urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d9",
"cim:Conductor.length": {
"@id": "_:b0"
}
},
{
"@id": "urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d5",
"cim:IdentifiedObject.Name": "Switch1"
}
]
},
{
"@id": "urn:uuid:f52f12c3-db10-4d41-a9f2-b1fe29ab4d6d-forward",
"@graph": [
{
"@id": "urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d9",
"cim:Conductor.length": {
"@id": "_:b3"
}
},
{
"@id": "_:b3",
"cim:Length.value": {
"@value": "55",
"@type": "http://www.w3.org/2001/XMLSchema#integer"
}
},
{
"@id": "urn:uuid:9d58e5bb-834c-4faa-928c-7da0bb1497d5",
"cim:IdentifiedObject.Name": "Switch2"
}
]
}
],
"@context": {
"eu": "http://iec.ch/TC57/CIM100-European#",
"dm": "http://iec.ch/TC57/61970-552/DifferenceModel/1#",
"rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
"cim": "http://iec.ch/TC57/CIM100#",
"md": "http://iec.ch/TC57/61970-552/ModelDescription/1#"
}
} |
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
As part of creating a CIMXML to/from CIMJSON-LD converter we would need to define how the DifferenceModel file defined in
the IEC 61970-552 CIMXML Model exchange format .
A proposal describing the CIMXML DifferenceModel was presented for the W3C and got Tim Berners-Lee support, but was still not approved.
Being able to exchange and validate changes to a digital twin model by change set is critical. It is also very useful for handling alternative changes into the future. The changes would need to be accommodated with meta-data.
A ACLineSegment object is described with the following property:
Changing the ACLineSegment object by changing the length from 50 meter to 55 meter would look like:
reverseDifferences describe the dataset that will be removed (delete).
forwardDifferences describe the dataset that will be added (add)
An update is describe as reverseDifferences and forwardDifferences (as shown in the example).
Proposal 1: Single Graph
Alt 2: Two graph
I do not think the example is correct. I think we might need to use the container structure shown in Example 122 in the JSON-LD 1.1 standard.
Relevant links:
Beta Was this translation helpful? Give feedback.
All reactions