02/22/2022
OfflineHi all
I'm struggeling with working on and with NodeSets created by different tools. What is the core idea or specification. I didn't found anything regarding this topic: Most implementations are using other nodesets. Also companion specifications are referencing them. This leads to a hirarchy of nodesets.
<!-- Machinery JobMng in custom type (namespace 1)--><UAObject NodeId="ns=1;i=5066" BrowseName="5:JobOrderControl" ParentNodeId="ns=1;i=5064"><DisplayName>JobOrderControl</DisplayName><References><Reference ReferenceType="HasTypeDefinition">ns=4;i=1002</Reference><Reference ReferenceType="HasModellingRule">i=78</Reference><!-- Current project namespace: overwrite optional methods to mandatory, so this is as expected --><Reference ReferenceType="HasComponent">ns=1;i=7000</Reference> <!-- Example: Cancel-Method --><Reference ReferenceType="HasComponent">ns=1;i=7001</Reference><Reference ReferenceType="HasComponent">ns=1;i=7002</Reference><Reference ReferenceType="HasComponent">ns=1;i=7003</Reference><Reference ReferenceType="HasComponent">ns=1;i=7007</Reference><Reference ReferenceType="HasComponent">ns=1;i=7013</Reference><!-- Machinery Jobs NodeSet (not exactly expected, but ok) --><ReferenceReferenceType="HasComponent">ns=5;i=6008</Reference><Reference ReferenceType="HasComponent">ns=5;i=6007</Reference><Reference ReferenceType="HasComponent">ns=5;i=6006</Reference><Reference ReferenceType="HasProperty">ns=5;i=6005</Reference><Reference ReferenceType="HasComponent">ns=5;i=6004</Reference><Reference ReferenceType="HasComponent">ns=5;i=6003</Reference><Reference ReferenceType="HasComponent">ns=5;i=6002</Reference><Reference ReferenceType="HasComponent">ns=5;i=6001</Reference><Reference ReferenceType="HasComponent">ns=5;i=6009</Reference></References></UAObject><!-- Example: Cancel-Method --><UAMethod NodeId="ns=1;i=7000" BrowseName="4:Cancel" ParentNodeId="ns=1;i=5066"><DisplayName>Cancel</DisplayName><References><Reference ReferenceType="HasModellingRule">i=78</Reference> <!-- ModellingRule_Mandatory --><Reference ReferenceType="HasProperty">ns=1;i=6006</Reference><Reference ReferenceType="HasProperty">ns=1;i=6007</Reference></References></UAMethod><!-- Example: referenced to machinery job nodeset and defined there --><UAVariable NodeId="ns=1;i=6009" BrowseName="CurrentState" ParentNodeId="ns=1;i=5001" DataType="LocalizedText"><DisplayName>CurrentState</DisplayName><References><Reference ReferenceType="HasModellingRule">i=78</Reference><Reference ReferenceType="HasTypeDefinition">i=2760</Reference><Reference ReferenceType="HasComponent" IsForward="false">ns=1;i=5001</Reference><Reference ReferenceType="HasProperty">ns=1;i=6010</Reference></References></UAVariable>
On the other side, UAModeler creates a different output:
<!-- UAModeler cloned/copy --><UAObject NodeId="ns=1;i=5066" BrowseName="5:JobOrderControl" ParentNodeId="ns=1;i=5064"><DisplayName>JobOrderControl</DisplayName><References><Reference ReferenceType="HasTypeDefinition">ns=4;i=1002</Reference><Reference ReferenceType="HasModellingRule">i=78</Reference><!-- Current project namespace: everything copied without considering of modificaitons (or not) --><Reference ReferenceType="HasComponent">ns=1;i=7000</Reference> <!-- Example: Cancel-Method --><Reference ReferenceType="HasComponent">ns=1;i=7001</Reference><Reference ReferenceType="HasComponent">ns=1;i=7002</Reference><Reference ReferenceType="HasComponent">ns=1;i=7003</Reference><Reference ReferenceType="HasComponent">ns=1;i=7007</Reference><Reference ReferenceType="HasComponent">ns=1;i=7013</Reference><Reference ReferenceType="HasComponent">ns=1;i=6023</Reference> <!-- Example: CurrentState --><Reference ReferenceType="HasComponent">ns=1;i=6033</Reference><Reference ReferenceType="HasComponent">ns=1;i=6035</Reference><Reference ReferenceType="HasComponent">ns=1;i=6037</Reference><Reference ReferenceType="HasComponent">ns=1;i=6038</Reference><Reference ReferenceType="HasProperty">ns=1;i=6039</Reference><Reference ReferenceType="HasComponent">ns=1;i=6040</Reference><Reference ReferenceType="HasComponent">ns=1;i=6045</Reference><Reference ReferenceType="HasComponent">ns=1;i=6046</Reference></References></UAObject><UAVariable DataType="LocalizedText" NodeId="ns=1;i=6023" BrowseName="CurrentState" ParentNodeId="ns=1;i=5066"><DisplayName>CurrentState</DisplayName><References><Reference ReferenceType="HasTypeDefinition">i=2760</Reference><Reference ReferenceType="HasModellingRule">i=78</Reference><Reference ReferenceType="HasProperty">ns=5;i=6010</Reference></References></UAVariable><UAMethod NodeId="ns=1;i=7000" BrowseName="4:Cancel" ParentNodeId="ns=1;i=5066"><DisplayName>Cancel</DisplayName><References><Reference ReferenceType="HasModellingRule">i=78</Reference> <!-- ModellingRule_Mandatory --><Reference ReferenceType="HasProperty">ns=1;i=6006</Reference><Reference ReferenceType="HasProperty">ns=1;i=6007</Reference></References></UAMethod><!-- 5: Machinery Jobs NodeSet (copy concept, because created by UAModeler) --><UAVariable NodeId="ns=1;i=6009" BrowseName="CurrentState" ParentNodeId="ns=1;i=5001" DataType="LocalizedText"><DisplayName>CurrentState</DisplayName><References><Reference ReferenceType="HasModellingRule">i=78</Reference><Reference ReferenceType="HasTypeDefinition">i=2760</Reference><Reference ReferenceType="HasComponent" IsForward="false">ns=1;i=5001</Reference><Reference ReferenceType="HasProperty">ns=1;i=6010</Reference></References></UAVariable><UAObject NodeId="ns=1;i=5001" BrowseName="1:JobOrderControl" ParentNodeId="ns=1;i=1003"><DisplayName>JobOrderControl</DisplayName><References><Reference ReferenceType="HasModellingRule">i=78</Reference><Reference ReferenceType="HasTypeDefinition">ns=2;i=1002</Reference> <!-- ISA95 JobControl V2 NodeSet--><Reference ReferenceType="HasComponent">ns=1;i=6009</Reference><Reference ReferenceType="HasComponent">ns=1;i=6001</Reference><Reference ReferenceType="HasComponent" IsForward="false">ns=1;i=1003</Reference><Reference ReferenceType="HasComponent">ns=1;i=6002</Reference><Reference ReferenceType="HasComponent">ns=1;i=6003</Reference><Reference ReferenceType="HasComponent">ns=1;i=6004</Reference><Reference ReferenceType="HasProperty">ns=1;i=6005</Reference><Reference ReferenceType="HasComponent">ns=1;i=6006</Reference><Reference ReferenceType="HasComponent">ns=1;i=6007</Reference><Reference ReferenceType="HasComponent">ns=1;i=6008</Reference></References></UAObject><!-- ISA95 JobControl V2 NodeSet --><UAObjectType NodeId="ns=1;i=1002" BrowseName="1:ISA95JobOrderReceiverObjectType"><DisplayName>ISA95JobOrderReceiverObjectType</DisplayName><Description>The OPENSCSJobOrderReciverObjectType contains a method to receive job order commands and optional definitions of allowable job order information</Description><Category>ISA-95 Job Order Receiver V2</Category><Documentation>https://reference.opcfoundatio.....on><References><!-- ... --></References></UAObjectType>
<!-- custom NodeSet--><UAObject NodeId="ns=1;i=5066" BrowseName="5:JobOrderControl" ParentNodeId="ns=1;i=5064"><DisplayName>JobOrderControl</DisplayName><References><Reference ReferenceType="HasTypeDefinition">ns=4;i=1002</Reference><Reference ReferenceType="HasModellingRule">i=78</Reference><!-- Current project namespace: overwrite optional methods to mandatory --><Reference ReferenceType="HasComponent">ns=1;i=7000</Reference><Reference ReferenceType="HasComponent">ns=1;i=7001</Reference><Reference ReferenceType="HasComponent">ns=1;i=7002</Reference><Reference ReferenceType="HasComponent">ns=1;i=7003</Reference><Reference ReferenceType="HasComponent">ns=1;i=7007</Reference><Reference ReferenceType="HasComponent">ns=1;i=7013</Reference><Reference ReferenceType="HasComponent">i=2772</Reference><!-- based on removing all clones in custom nodeset and machinery job: referencing directly to ISA95 NodeSet (machinery doesn't add any modifications)--><Reference ReferenceType="HasComponent">ns=4;i=6037</Reference><Reference ReferenceType="HasComponent">ns=4;i=6033</Reference><Reference ReferenceType="HasComponent">ns=4;i=6035</Reference><Reference ReferenceType="HasComponent">ns=4;i=6036</Reference><Reference ReferenceType="HasProperty">ns=4;i=6088</Reference><Reference ReferenceType="HasComponent">ns=4;i=6039</Reference><Reference ReferenceType="HasComponent">ns=4;i=6038</Reference><Reference ReferenceType="HasComponent">ns=4;i=6034</Reference></References></UAObject><!-- Machinery Job NodeSet (optimized by SIOME)--><UAObject NodeId="ns=2;i=5001" BrowseName="2:JobOrderControl" ParentNodeId="ns=2;i=1003"><DisplayName>JobOrderControl</DisplayName><References><Reference ReferenceType="HasModellingRule">i=78</Reference><Reference ReferenceType="HasTypeDefinition">ns=1;i=1002</Reference> <!-- ISA95 NodeSet --><Reference ReferenceType="HasComponent">i=2772</Reference></References></UAObject><!-- No definition of any attribute (e.g. CurrentState), because already defined in ns=1;i=1002 --><!-- ISA95 JobControl V2 NodeSet --><UAObjectType NodeId="ns=1;i=1002" BrowseName="1:ISA95JobOrderReceiverObjectType"><DisplayName>ISA95JobOrderReceiverObjectType</DisplayName><Description>The OPENSCSJobOrderReciverObjectType contains a method to receive job order commands and optional definitions of allowable job order information</Description><Category>ISA-95 Job Order Receiver V2</Category><Documentation>https://reference.opcfoundatio.....on><References><!-- ... --></References></UAObjectType>
A UANodeSet is expected to contain many UANodes which reference each other.Tools that create UANodeSets should not add Reference elements for both directions in order to minimize the size of the XML file.
Best regards
Patrick
05/30/2017
OfflineMost text based formats have multiple representations that are equivalent that leave out or normalize elements.
This happens in XML a lot.
The expectation is applications dealing with multiple NodeSets load all of the NodeSets into memory and index the Nodes using the normalization rules. This should allow applications to have a consistent view of the Nodes.
It is not clear why you think one big NodeSet would be better because that is no different than loading into a memory index.
That said, it does seem like we need compliance testing for modelling tools.
1 Guest(s)


Log In

Usage Policy