code: func (p SubjectPath) Subject(e *Entity) (string, error) {
  	var next Object = e
  	var prev *Entity
  	var item string
  	for _, item = range p {
  		ent, ok := next.(*Entity)
  		if !ok {
  			return "", errors.Errorf("can't get '%v' out of non-entity %#v.", item, next)
  		}
  		prev = ent
  		next = ent.Objects[Property(item)]
  	}
  	delete(prev.Objects, Property(item)) // remove the subject from the entity so that it isn't indexed
  	switch next.(type) {
  	case I, I8, I16, I32, I64, U, U8, U16, U32, U64:
  		return fmt.Sprintf("%d", next), nil
  	case F32, F64:
  		return fmt.Sprintf("%f", next), nil
  	case S:
  		return string(next.(S)), nil
  	default:
  		return "", fmt.Errorf("can't make %v of type %T an IRI", next, next)
  	}
  }
docs: // Subject implements EntitySubjecter.