docs: private T has(AttributeType attributeType, Schema.ImplicitType has, Schema.ImplicitType hasValue, Schema.ImplicitType hasOwner, boolean required) {
          Label attributeLabel = attributeType.label();
          Role ownerRole = vertex().tx().putRoleTypeImplicit(hasOwner.getLabel(attributeLabel));
          Role valueRole = vertex().tx().putRoleTypeImplicit(hasValue.getLabel(attributeLabel));
          RelationType relationType = vertex().tx().putRelationTypeImplicit(has.getLabel(attributeLabel)).
                  relates(ownerRole).
                  relates(valueRole);
  
          //this plays ownerRole;
          this.play(ownerRole, required);
          //TODO: Use explicit cardinality of 0-1 rather than just false
          //attributeType plays valueRole;
          ((AttributeTypeImpl) attributeType).play(valueRole, false);
  
          updateAttributeRelationHierarchy(attributeType, has, hasValue, hasOwner, ownerRole, valueRole, relationType);
  
          return getThis();
      }