def METHOD_NAME(
    self, cls: ClassDefinition, aliased_slot_name: str, slot: SlotDefinition
) -> None:
    if slot.range in self.schema.classes:
        rng = camelcase(slot.range)
    elif slot.range in self.schema.types:
        # XXX Why does `linkml_runtime.utils.metamodelcore.Identifier` subclass `str`??
        rng = str(self.schema.types[slot.range].uri)
    else:
        rng = "xsd:string"
    name = f"{cls.name} {aliased_slot_name}" if slot.is_usage_slot else aliased_slot_name
    # translate to terminusdb xsd builtins:
    if rng == "xsd:int":
        rng = "xsd:integer"
    elif rng == "xsd:float":
        rng = "xsd:double"
    elif rng == "xsd:language":
        rng = "xsd:string"
    if rng not in XSD_Ok and slot.range not in self.schema.classes:
        raise Exception(
            f"slot range for {name} must be schema class or supported xsd type. "
            f"Range {rng} is of type {type(rng)}."
        )
    self.clswq.property(underscore(name), rng, label=name, description=slot.description)
    if not slot.multivalued:
        self.clswq.max(1)
    if slot.required:
        self.clswq.min(1)
    if slot.is_a:
        self.raw_additions.append(
            WQ().add_quad(
                underscore(name),
                "rdfs:subPropertyOf",
                self.clswq.iri(underscore(slot.is_a)),
                "inference/main",
            )
        )