Currently VersionOfObjectRefStructure is used as base of all refererences which makes it impossible to enforce anything at that level.
My suggestion would be, make an abstract version VersionOfObjectRefStructure, replace all current references with that abstract version.
Create a new VersionOfObjectRefStructure which inherits from the abstract VersionOfObjectRefStructure with one change: make the attribute nameOfRefClass required. It is impossible to have any of the reference below without a valid nameOfRefClass.
"TariffObjectRef" type="VersionOfObjectRefStructure" substitutionGroup="VersionOfObjectRef">
"StartTimeAtStopPointRef" type="VersionOfObjectRefStructure" substitutionGroup="VersionOfObjectRef">
"GroupRef" type="VersionOfObjectRefStructure" minOccurs="0">
"MemberObjectRef" type="VersionOfObjectRefStructure">
"AccountedObjectRef" type="VersionOfObjectRefStructure" minOccurs="0">
"ProjectedObjectRef" type="VersionOfObjectRefStructure" minOccurs="0">
"ParentRef" type="VersionOfObjectRefStructure" minOccurs="0">
"NoticedObjectRef" type="VersionOfObjectRefStructure" minOccurs="0">
"DepictedObjectRef" type="VersionOfObjectRefStructure" minOccurs="0">
"ConditionedObjectRef" type="VersionOfObjectRefStructure" minOccurs="0">
"ConditionedObjectRef" type="VersionOfObjectRefStructure" minOccurs="0">
"ConditionedObjectRef" type="VersionOfObjectRefStructure" minOccurs="0">
"ConditionedObjectRef" type="VersionOfObjectRefStructure" minOccurs="0">
"ConditionedObjectRef" type="VersionOfObjectRefStructure" minOccurs="0">
"TriggerObjectRef" type="VersionOfObjectRefStructure" minOccurs="0">
"ConditionedObjectRef" type="VersionOfObjectRefStructure" minOccurs="0">
"RuleObjectRef" type="VersionOfObjectRefStructure" minOccurs="0">
"VersionOfObjectRef" type="VersionOfObjectRefStructure">
"DataManagedObjectRef" type="VersionOfObjectRefStructure" minOccurs="0">
"DataManagedObjectRef" type="VersionOfObjectRefStructure" minOccurs="0">
"ObjectRef" type="VersionOfObjectRefStructure" minOccurs="0">
"GroupRef" type="VersionOfObjectRefStructure" minOccurs="0">
"MemberObjectRef" type="VersionOfObjectRefStructure">
"NamedObjectRef" type="VersionOfObjectRefStructure" minOccurs="0">
"NamedObjectRef" type="VersionOfObjectRefStructure" minOccurs="0">
"BookedObjectRef" type="VersionOfObjectRefStructure" minOccurs="0">
"NamedObjectRef" type="VersionOfObjectRefStructure" minOccurs="0">
Currently VersionOfObjectRefStructure is used as base of all refererences which makes it impossible to enforce anything at that level.
My suggestion would be, make an abstract version VersionOfObjectRefStructure, replace all current references with that abstract version.
Create a new VersionOfObjectRefStructure which inherits from the abstract VersionOfObjectRefStructure with one change: make the attribute nameOfRefClass required. It is impossible to have any of the reference below without a valid nameOfRefClass.