code: function geoAttributePair() {
    var args = mlutil.asArray.apply(null, arguments);
    if (args.length < 2) {
      throw new Error('need at least two parameters for geospatial attribute pair query');
    }
  
    var location = {};
  
    var keys = ['parent', 'lat', 'lon'];
    var iArg=0;
    for (var i=0; i < keys.length; i++) {
      var key = keys[i];
      var arg = args[iArg++];
      if (arg instanceof QNameDef) {
        location[key] = arg;
      } else if (typeof arg === 'string' || arg instanceof String) {
        location[key] = new QNameDef(null, arg);
      } else if (arg instanceof ElementDef) {
        location.parent = arg.element;
      } else if (arg instanceof AttributeDef) {
        if (key === 'parent' || !location.parent) {
          location.parent = arg.element;
          i++;
        }
        location[keys[i]] = arg.attribute;
      } else {
        throw new Error('no parameter for '+key+': '+JSON.stringify(arg));
      }
    }
  
    return {'geo-attr-pair': location};
  }
docs: Specifies the geospatial locations represented by an XML attribute pair
  for passing to the {@link queryBuilder#geospatial} function.
  @method
  @since 1.0
  @memberof queryBuilder#
  @param {string|queryBuilder.QName} parent - the name of the element
  containing the attributes as returned by the {@link queryBuilder#qname} function
  @param {string|queryBuilder.QName} latitude - the name of the latitude
  attribute as returned by the {@link queryBuilder#qname} function
  @param {string|queryBuilder.QName} longitude -  the name of the longitude
  attribute as returned by the {@link queryBuilder#qname} function
  @returns {queryBuilder.GeoLocation} the specification for the geospatial locations