Objects and References

ISO XML consists of tags, elements (with or without content), and xml attributes. An xml attribute is a name/value pair that exists within a start-tag or empty-element tag. Attributes provide additional information about an element which is not part of the data. Attribute values must contain either single or double quotes. This example shows a step element with one attribute named number with a value of “3”:

<step number="3">Connect A to B.</step>

Note that the number attribute is not part of the content of this element, i.e. Connect A to B.

Many of the XML attributes used in the ISO Standards fall into two groups: identifiers and references:

  • Identifiers: id and uuid
  • References: uuidref and xlink:href

These standard attributes can only occur in specific places in the XML:

  • Objects start with two upper case letters and an underscore (e.g. MD_, CI_, ...) and have identifiers (id and uuid)
  • Roles start with lower case letters and have references (uuidref and xlink:href)

The Figure illustrates this idea with two people: Jane and John Doe. They are items in the real-world, i.e. objects. In ISO metadata they have a type (CI_Individual) and they have identifiers (JaneDoe and JohnDoe). They also have roles with respect to one another. Jane has a friend (the role) whose identifier is JohnDoe. This is indicated with the reference (xlink:href) to JohnDoe associated with the role of friend. John also has a friend (the role) named JaneDoe, as indicated by the reference to Jane associated with the friend role.

Understanding that roles start with lower case letters and are fulfilled by objects that start with uppercase letters and have id's is one of the simple secrets of ISO XML. Keep it in mind!

People and Organizations: The Conceptual Model (UML) 

The ISO UML for People and Organisations is shown on here. The model starts with the CI_Responsibility Object. In this case, the initial CI indicates that this object is part of the Citation UML package. The CI_Responsibility object has three properties: role, extent, and party that identify three roles (please ignore the unfortunate overlap for the word role in this example) . Each of these properties defines roles that are played by other objects. The role role is played by a CI_RoleCode object; the extent role is played by an EX_Extent object; and the party role is played by a CI_Party object. In some cases, there can be multiple objects in a particular role. For example, a CI_Responsibility can have 1 or more ([1..*]) associated parties.


People and Organizations: The Implementation (XML)

The rules for encoding the ISO UML into XML are given in ISO 19118 and ISO 19139. The organization of information into objects and roles results in an important characteristic of ISO XML: the levels always alternate between objects (XX_UpperCamelCase)  and roles (lowerCamelCase). As mentioned above, identifiers and references also alternate: objects can have identifiers (ids or uuids) and roles have references (uuidref and xlink:href). References could be used in this example to refer to the person that plays the pointOfContact role:

<cit:CI_RoleCode codeListValue = "pointOfContact">pointOfContact</cit:CI_RoleCode>
<cit:party xlink:href = "#JohnDoe"/ >


<cit:CI_RoleCode codeListValue = "pointOfContact">
<cit:CI_Individual id="JohnDoe">