code: def parse_property_reference(self, tup_tree):
          
  
          self.check_node(tup_tree, 'PROPERTY.REFERENCE', ('NAME',),
                          ('REFERENCECLASS', 'CLASSORIGIN', 'PROPAGATED'),
                          ('QUALIFIER', 'VALUE.REFERENCE'))
  
          value = self.list_of_matching(tup_tree, ('VALUE.REFERENCE',))
  
          if not value:
              value = None
          elif len(value) == 1:
              value = value[0]
          else:
              raise CIMXMLParseError(
                  _format("Element {0!A} has more than one child element "
                          "'VALUE.REFERENCE' (allowed are zero or one)",
                          name(tup_tree)),
                  conn_id=self.conn_id)
  
          attrl = attrs(tup_tree)
  
          qualifiers = self.list_of_matching(tup_tree, ('QUALIFIER',))
  
          pref = CIMProperty(attrl['NAME'],
                             value,
                             type='reference',
                             is_array=False,
                             qualifiers=qualifiers,
                             reference_class=attrl.get('REFERENCECLASS', None),
                             class_origin=attrl.get('CLASSORIGIN', None),
                             propagated=self.unpack_boolean(
                                 attrl.get('PROPAGATED', 'false')),
                             embedded_object=False)
  
          return pref
docs: ::
  
              <!ELEMENT PROPERTY.REFERENCE (QUALIFIER*, (VALUE.REFERENCE)?)>
              <!ATTLIST PROPERTY.REFERENCE
                  %CIMName;
                  %ReferenceClass;
                  %ClassOrigin;
                  %Propagated;>