# XML Element References¶

XML documents are inherently hierarchical. This works out well for describing many things regarding houses, and home performance in general. For instance, an AFUE is a property of a furnace, which is part of an HVAC system on a building. Many other relationships are not as strictly hierarchical, however. An example of this would be the relationship between two furnaces in different snapshots of the building where one furnace replaced the other. In that case, there is no clear parent-child relationship.

In HPXML we have the ability and requirement to identify many elements with unique identifiers. This facilitates referential relationships between elements throughout the document. This is done with the SystemIdentifier element.

## Intra-Document References¶

The most common reference you will make is a reference that is internal to the document.

### ID and IDREF¶

Each element in the HPXML document that could need to be referenced has a required SystemIdentifier sub-element which in turn has a required id attribute. That attribute has the xs:ID data type in XML Schema. This provides a unique identifier for that element within the document. This is similar to a primary key in a relational database.

When an element needs to reference another element it uses an xs:IDREF datatype, which ensures that the id referenced exists somewhere within the document. One simple example of this is how a window can reference the wall to which it is attached.

<?xml version="1.0" encoding="UTF-8"?>
<HPXML xmlns="http://hpxmlonline.com/2014/6" schemaVersion="2.3">
<XMLType></XMLType>
<XMLGeneratedBy></XMLGeneratedBy>
<CreatedDateAndTime>2014-09-03T16:06:24Z</CreatedDateAndTime>
<Transaction>create</Transaction>
<SoftwareInfo/>
<Building>
<BuildingID id="bldg1"/>
<ProjectStatus>
<EventType>audit</EventType>
</ProjectStatus>
<BuildingDetails>
<Enclosure>
<Walls>
<Wall>
<SystemIdentifier id="wall1"/>
</Wall>
</Walls>
<Windows>
<Window>
<SystemIdentifier id="window1"/>
<AttachedToWall idref="wall1"/>
</Window>
</Windows>
</Enclosure>
</BuildingDetails>
</Building>
</HPXML>


### sameas¶

The sameas attribute is a special IDREF that is used most predominantly in the case of the Audit-Upgrade. It serves to link components of buildings between the pre- and post-upgrade Building nodes. Each Building node is a full description of the building and measures only affect some of the components. For components that do not change it is useful to have a way to indicate that they are the same item.

<?xml version="1.0" encoding="UTF-8"?>
<HPXML xmlns="http://hpxmlonline.com/2014/6" schemaVersion="2.3">
<XMLType></XMLType>
<XMLGeneratedBy></XMLGeneratedBy>
<CreatedDateAndTime>2014-09-03T16:06:24Z</CreatedDateAndTime>
<Transaction>create</Transaction>
<SoftwareInfo/>
<Building>
<BuildingID id="bldg1"/>
<ProjectStatus>
<EventType>audit</EventType>
</ProjectStatus>
<BuildingDetails>
<Enclosure>
<Walls>
<Wall>
<SystemIdentifier id="wall1"/>
</Wall>
</Walls>
</Enclosure>
</BuildingDetails>
</Building>
<Building>
<BuildingID id="bldg1post"/>
<ProjectStatus>
<EventType>proposed workscope</EventType>
</ProjectStatus>
<BuildingDetails>
<Enclosure>
<Walls>
<Wall>
<SystemIdentifier id="wall1post" sameas="wall1"/>
</Wall>
</Walls>
</Enclosure>
</BuildingDetails>
</Building>
</HPXML>


## Inter-Document References¶

The SystemIdentifier element also has sub-elements that facilitate specifying identifiers for both a sending and receiving system. This way a document could identify components based on where it is coming from and going to. This feature currently isn’t used much in lieu of the much simplified Intra-Document References.