Reference Type

The Reference type allows you to reference another schema by its $ref property. This is useful for reusing schemas across your application.

The Reference type has no specific properties, it has only the generic properties:

  • default: Default value for the reference.

  • description: Description of the reference field.

Examples

  1. Reference to the Root schema:

from jambo import SchemaConverter

schema = {
    "title": "Person",
    "type": "object",
    "properties": {
        "name": {"type": "string"},
        "age": {"type": "integer"},
        "emergency_contact": {
            "$ref": "#"
        }
    },
    "required": ["name"],
}

Model = SchemaConverter.build(schema)

obj = Model(name="Alice", age=30, emergency_contact=Model(name="Bob", age=25))
print(obj) # Output: Person(name='Alice', age=30, emergency_contact=Person(name='Bob', age=25))
  1. Reference to a Def Schema:

from jambo import SchemaConverter

schema = {
    "title": "Person",
    "type": "object",
    "properties": {
        "name": {"type": "string"},
        "age": {"type": "integer"},
        "address": {
            "$ref": "#/$defs/Address"
        }
    },
    "required": ["name"],
    "$defs": {
        "Address": {
            "type": "object",
            "properties": {
                "street": {"type": "string"},
                "city": {"type": "string"},
            },
            "required": ["street", "city"],
        }
    },
}

Model = SchemaConverter.build(schema)

obj = Model(name="Alice", age=30, address={"street": "123 Main St", "city": "Springfield"})
print(obj) # Output: Person(name='Alice', age=30, address=Address(street='123 Main St', city='Springfield'))

Note

At the moment, Jambo doesn’t have a way to expose the class definition Address defined inside the $defs property, but you can access the model class by using the Model.__fields__ attribute to get the field definitions, or by using the Model.model_fields property to get a dictionary of field names and their types.

Warning

The JSON Schema Reference specification allows for uri referneces, but Jambo currently only supports root references (using the # symbol) and def references (using the $def property).