make every instance variable's DataType at least as narrow as its declaration.
OPC 10000-3 lets an instance use the DataType its type definition declares for the member, or
a subtype of it; a supertype is not conformant. Companion nodesets that predate a narrowing
of the standard types carry the supertype anyway (every NamespaceMetadata object written
against UA 1.04 declares ModelVersion as String, which UA 1.05 narrowed to
SemanticVersionString), so every server loading them fails the type-conformance check of
the CTT (Base Info Core Structure) and no server can fix it per nodeset. The declared type is
what the model means: an instance whose DataType is a strict supertype of the declared one is
moved to the declared one.
Nothing else moves: an instance whose DataType is the declared one, a subtype of it, or
unrelated is left alone, values are never touched, and the children of types are declarations,
not instances. A variable whose current value would not fit the declared built-in type is
left alone as well, and reported: narrowing it would make the value lie about its type.
make every instance variable's DataType at least as narrow as its declaration.
OPC 10000-3 lets an instance use the DataType its type definition declares for the member, or a subtype of it; a supertype is not conformant. Companion nodesets that predate a narrowing of the standard types carry the supertype anyway (every NamespaceMetadata object written against UA 1.04 declares
ModelVersionas String, which UA 1.05 narrowed to SemanticVersionString), so every server loading them fails the type-conformance check of the CTT (Base Info Core Structure) and no server can fix it per nodeset. The declared type is what the model means: an instance whose DataType is a strict supertype of the declared one is moved to the declared one.Nothing else moves: an instance whose DataType is the declared one, a subtype of it, or unrelated is left alone, values are never touched, and the children of types are declarations, not instances. A variable whose current value would not fit the declared built-in type is left alone as well, and reported: narrowing it would make the value lie about its type.