If `attributes` is basically an arbitrary object, should it be called `data`? Also, it's unclear why complex values must only contain primitive values or proper associated attributesIds. Could you elaborate on the what `attributeIds` is and what it's for?