Content abstaction framework