<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def visit_slot(self, slot_name: str, slot: SlotDefinition) -> None: """ Add a slot definition per slot @param slot_name: @param slot: @return: """

        # Note: We use the raw name in OWL and add a subProperty arc
        slot_uri = self.prop_uri(slot.name)

        # Parent slots
        if slot.is_a:
            self.graph.add((slot_uri, RDFS.subPropertyOf, self.prop_uri(slot.is_a)))
        for mixin in slot.mixins:
            self.graph.add((slot_uri, RDFS.subPropertyOf, self.prop_uri(mixin)))

        # Slot range
        if not slot.range or slot.range in builtin_names:
            self.graph.add((slot_uri, RDF.type,
                            OWL.DatatypeProperty if slot.object_property else OWL.AnnotationProperty))
            self.graph.add((slot_uri, RDFS.range, URIRef(builtin_uri(slot.range, expand=True))))
        elif slot.range in self.schema.types:
            self.graph.add((slot_uri, RDF.type,
                            OWL.DatatypeProperty if slot.object_property else OWL.AnnotationProperty))
            self.graph.add((slot_uri, RDFS.range, self.type_uri(slot.range)))
        else:
            self.graph.add((slot_uri, RDF.type, OWL.ObjectProperty if slot.object_property else OWL.AnnotationProperty))
            self.graph.add((slot_uri, RDFS.range, self.class_uri(slot.range)))

        # Slot domain
        if slot.domain:
            self.graph.add((slot_uri, RDFS.domain, self.class_uri(slot.domain)))

        # Annotations
        self.graph.add((slot_uri, RDFS.label, Literal(slot.name)))
        if slot.description:
            self.graph.add((slot_uri, OBO.IAO_0000115, Literal(slot.description)))