Skip to content

CJFake Manifest Schema

Machine-readable schema for benchmark generation manifests.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://github.com/3DGI/cityjson-fake/raw/main/src/data/cityjson-fake-manifest.schema.json",
  "title": "CityJSON Fake Generation Manifest",
  "type": "object",
  "additionalProperties": false,
  "required": ["version", "cases"],
  "properties": {
    "version": {
      "type": "integer",
      "const": 1,
      "description": "Manifest format version."
    },
    "purpose": {
      "type": ["string", "null"],
      "description": "Optional free-form description of the manifest's intent."
    },
    "cases": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/case"
      },
      "description": "Generation cases to build from the manifest."
    }
  },
  "$defs": {
    "case": {
      "type": "object",
      "additionalProperties": false,
      "required": ["id"],
      "properties": {
        "id": {
          "type": "string",
          "minLength": 1,
          "description": "Stable case identifier used for selection and output naming."
        },
        "description": {
          "type": ["string", "null"],
          "description": "Optional human-readable note about the case."
        },
        "seed": {
          "type": ["integer", "null"],
          "minimum": 0,
          "description": "Optional deterministic seed used to reproduce output."
        },
        "output": {
          "type": ["string", "null"],
          "minLength": 1,
          "description": "Optional output file path for the generated artifact."
        },
        "count": {
          "type": ["integer", "null"],
          "minimum": 1,
          "description": "Optional number of documents to emit for this case."
        },
        "allowed_types_cityobject": {
          "type": ["array", "null"],
          "uniqueItems": true,
          "items": {
            "$ref": "#/$defs/cityobject_type"
          },
          "description": "Restrict generated CityObject types."
        },
        "min_cityobjects": {
          "type": "integer",
          "minimum": 1,
          "description": "Minimum number of CityObjects to generate."
        },
        "max_cityobjects": {
          "type": "integer",
          "minimum": 1,
          "description": "Maximum number of CityObjects to generate."
        },
        "cityobject_hierarchy": {
          "type": "boolean",
          "description": "Whether to generate parent-child CityObject hierarchies."
        },
        "min_children": {
          "type": "integer",
          "minimum": 1,
          "description": "Minimum number of children per parent when hierarchy is enabled."
        },
        "max_children": {
          "type": "integer",
          "minimum": 1,
          "description": "Maximum number of children per parent when hierarchy is enabled."
        },
        "allowed_types_geometry": {
          "type": ["array", "null"],
          "uniqueItems": true,
          "items": {
            "$ref": "#/$defs/geometry_type"
          },
          "description": "Restrict generated geometry types."
        },
        "allowed_lods": {
          "type": ["array", "null"],
          "uniqueItems": true,
          "items": {
            "$ref": "#/$defs/lod"
          },
          "description": "Restrict generated LoD values."
        },
        "min_members_multipoint": {
          "type": "integer",
          "minimum": 1
        },
        "max_members_multipoint": {
          "type": "integer",
          "minimum": 1
        },
        "min_members_multilinestring": {
          "type": "integer",
          "minimum": 1
        },
        "max_members_multilinestring": {
          "type": "integer",
          "minimum": 1
        },
        "min_members_multisurface": {
          "type": "integer",
          "minimum": 1
        },
        "max_members_multisurface": {
          "type": "integer",
          "minimum": 1
        },
        "min_members_solid": {
          "type": "integer",
          "minimum": 1
        },
        "max_members_solid": {
          "type": "integer",
          "minimum": 1
        },
        "min_members_multisolid": {
          "type": "integer",
          "minimum": 1
        },
        "max_members_multisolid": {
          "type": "integer",
          "minimum": 1
        },
        "min_members_compositesurface": {
          "type": "integer",
          "minimum": 1
        },
        "max_members_compositesurface": {
          "type": "integer",
          "minimum": 1
        },
        "min_members_compositesolid": {
          "type": "integer",
          "minimum": 1
        },
        "max_members_compositesolid": {
          "type": "integer",
          "minimum": 1
        },
        "min_members_cityobject_geometries": {
          "type": "integer",
          "minimum": 1
        },
        "max_members_cityobject_geometries": {
          "type": "integer",
          "minimum": 1
        },
        "min_coordinate": {
          "type": "number",
          "description": "Minimum generated vertex coordinate."
        },
        "max_coordinate": {
          "type": "number",
          "description": "Maximum generated vertex coordinate."
        },
        "min_vertices": {
          "type": "integer",
          "minimum": 1
        },
        "max_vertices": {
          "type": "integer",
          "minimum": 1
        },
        "materials_enabled": {
          "type": "boolean"
        },
        "min_materials": {
          "type": "integer",
          "minimum": 1
        },
        "max_materials": {
          "type": "integer",
          "minimum": 1
        },
        "nr_themes_materials": {
          "type": "integer",
          "minimum": 1
        },
        "generate_ambient_intensity": {
          "type": ["boolean", "null"]
        },
        "generate_diffuse_color": {
          "type": ["boolean", "null"]
        },
        "generate_emissive_color": {
          "type": ["boolean", "null"]
        },
        "generate_specular_color": {
          "type": ["boolean", "null"]
        },
        "generate_shininess": {
          "type": ["boolean", "null"]
        },
        "generate_transparency": {
          "type": ["boolean", "null"]
        },
        "textures_enabled": {
          "type": "boolean"
        },
        "min_textures": {
          "type": "integer",
          "minimum": 1
        },
        "max_textures": {
          "type": "integer",
          "minimum": 1
        },
        "nr_themes_textures": {
          "type": "integer",
          "minimum": 1
        },
        "max_vertices_texture": {
          "type": "integer",
          "minimum": 1
        },
        "texture_allow_none": {
          "type": "boolean"
        },
        "use_templates": {
          "type": "boolean"
        },
        "min_templates": {
          "type": "integer",
          "minimum": 1
        },
        "max_templates": {
          "type": "integer",
          "minimum": 1
        },
        "metadata_enabled": {
          "type": "boolean"
        },
        "metadata_geographical_extent": {
          "type": "boolean"
        },
        "metadata_identifier": {
          "type": "boolean"
        },
        "metadata_reference_date": {
          "type": "boolean"
        },
        "metadata_reference_system": {
          "type": "boolean"
        },
        "metadata_title": {
          "type": "boolean"
        },
        "metadata_point_of_contact": {
          "type": "boolean"
        },
        "attributes_enabled": {
          "type": "boolean"
        },
        "min_attributes": {
          "type": "integer",
          "minimum": 1
        },
        "max_attributes": {
          "type": "integer",
          "minimum": 1
        },
        "attributes_max_depth": {
          "type": "integer",
          "minimum": 0
        },
        "attributes_random_keys": {
          "type": "boolean"
        },
        "attributes_value_mode": {
          "type": "string",
          "enum": ["heterogenous", "homogenous"],
          "default": "heterogenous",
          "description": "Attribute value mode. 'heterogenous': the same attribute key can have different value types across CityObjects. 'homogenous': a scalar type (bool, integer, unsigned, float, string) is assigned to each attribute key and stays consistent across all CityObjects, inside arrays, and inside maps."
        },
        "attributes_allow_null": {
          "type": "boolean",
          "description": "Allow null values for attributes. In heterogenous mode: null is included in the random type pool. In homogenous mode: each value has a 1-in-7 chance of being null instead of the designated scalar type."
        },
        "semantics_enabled": {
          "type": "boolean"
        },
        "allowed_types_semantic": {
          "type": ["array", "null"],
          "uniqueItems": true,
          "items": {
            "$ref": "#/$defs/semantic_type"
          },
          "description": "Restrict generated semantic surface types."
        }
      }
    },
    "cityobject_type": {
      "type": "string",
      "enum": [
        "Bridge",
        "Building",
        "CityFurniture",
        "CityObjectGroup",
        "GenericCityObject",
        "LandUse",
        "OtherConstruction",
        "PlantCover",
        "SolitaryVegetationObject",
        "TINRelief",
        "TransportSquare",
        "Railway",
        "Road",
        "Tunnel",
        "WaterBody",
        "Waterway",
        "BridgePart",
        "BridgeInstallation",
        "BridgeConstructiveElement",
        "BridgeRoom",
        "BridgeFurniture",
        "BuildingPart",
        "BuildingInstallation",
        "BuildingConstructiveElement",
        "BuildingFurniture",
        "BuildingStorey",
        "BuildingRoom",
        "BuildingUnit",
        "TunnelPart",
        "TunnelInstallation",
        "TunnelConstructiveElement",
        "TunnelHollowSpace",
        "TunnelFurniture"
      ]
    },
    "geometry_type": {
      "type": "string",
      "enum": [
        "MultiPoint",
        "MultiLineString",
        "MultiSurface",
        "CompositeSurface",
        "Solid",
        "MultiSolid",
        "CompositeSolid",
        "GeometryInstance"
      ]
    },
    "lod": {
      "type": "string",
      "enum": [
        "0",
        "0.0",
        "0.1",
        "0.2",
        "0.3",
        "1",
        "1.0",
        "1.1",
        "1.2",
        "1.3",
        "2",
        "2.0",
        "2.1",
        "2.2",
        "2.3",
        "3",
        "3.0",
        "3.1",
        "3.2",
        "3.3"
      ]
    },
    "semantic_type": {
      "type": "string",
      "enum": [
        "RoofSurface",
        "GroundSurface",
        "WallSurface",
        "ClosureSurface",
        "OuterCeilingSurface",
        "OuterFloorSurface",
        "Window",
        "Door",
        "InteriorWallSurface",
        "CeilingSurface",
        "FloorSurface",
        "WaterSurface",
        "WaterGroundSurface",
        "WaterClosureSurface",
        "TrafficArea",
        "AuxiliaryTrafficArea",
        "TransportationMarking",
        "TransportationHole"
      ]
    }
  }
}