As mentioned above, AutomationML uses the concepts of CAEX for its base structure and thus has an object-oriented approach. What computer scientists should be aware of is that the inheritance CAEX and, thereby, AutomationML use is a template-instance concept as opposed to a generalization concept like higher programming languages like C++/C# or Java use it. AutomationML objects can inherit from other objects. However, the fact that an inheritance took place does not guarantee the presence of certain attributes in objects. In AutomationML, it is legal that attributes of objects might be erased and altered over the course of the engineering process. For more information on this, consult the AutomationML Whitepaper.
AutomationML objects fall into four different categories. Each of these categories allows for attributes to be contained in the object. The categories have inherent meaning in the correlation of AutomationML objects. Internal Elements are used to represent a concrete entity on a shop floor. System Unit Classes, on the other hand, are templates that can be used for instantiating Internal Elements, so this category can be used for types of products, e.g., Role Classes represent abstract automation objects such as electric motors in general, modelling their relevant attributes without the need to refer to a concrete device. The fourth category is Interface Classes, which model relationships between objects in the other categories. Interface classes can have attributes that allow the representation of complex relationships between AutomationML objects.
Again, if you seek more information on these concepts, “Whitepaper AutomationML in a Nutshell” from AutomationML.org provides a good starting point and is freely available.