{
"$schema": "https://json-schema.org/draft/2019-09/schema",
"$id": "https://example.com/schema/lom.schema.json",
"type": "object",
"title": "LOM",
"description": "Specification of the wireframe of a single Web page",
"additionalProperties": true,
"properties": {
"rootPath": {
"$ref": "#/$defs/Path"
},
"pageWidth": {
"$ref": "#/$defs/Dimension"
},
"pageHeight": {
"$ref": "#/$defs/Dimension"
},
"loms": {
"type": "object",
"additionalProperties": false,
"patternProperties": {
"/?(([a-zA-Z0-9._-]+)(/[a-zA-Z0-9._-]+)*)?": {
"$ref": "#/$defs/Zone"
}
}
},
"events": {
"type": "array",
"description": "List of all events captured in recorded session",
"items": {
"$ref": "#/$defs/Event"
}
}
},
"required": [
"rootPath",
"pageWidth",
"pageHeight",
"loms",
"events"
],
"$defs": {
"Dimension": {
"type": "number",
"description": "Size of a graphical element along an axis",
"minimum": 0
},
"Path": {
"type": "string",
"description": "A slash separated path",
"pattern": "/?(([a-zA-Z0-9._-]+)(/[a-zA-Z0-9._-]+)*)?"
},
"Bounds": {
"type": "object",
"description": "Coordinates of an axis-aligned rectangle",
"additionalProperties": false,
"properties": {
"x": {
"type": "number",
"description": "x coordinate relative to parent zone"
},
"y": {
"type": "number",
"description": "y coordinate relative to parent zone"
},
"width": {
"$ref": "#/$defs/Dimension"
},
"height": {
"$ref": "#/$defs/Dimension"
}
},
"required": [
"x",
"width",
"height",
"y"
]
},
"Zone": {
"type": "object",
"description": "Representation of a zone on screen",
"properties": {
"zoneId": {
"type": "string",
"description": "Unique ID of this zone"
},
"bounds": {
"$ref": "#/$defs/Bounds"
},
"children": {
"type": "array",
"description": "List of children zones of this zone",
"minItems": 1,
"items": {
"$ref": "#/$defs/Zone"
}
},
"link": {
"$ref": "#/$defs/Path"
},
"style": {
"type": "object",
"additionalProperties": false,
"properties": {
"background": {
"type": "string"
},
"border": {
"type": "string"
}
}
}
},
"required": [
"bounds"
]
},
"Event": {
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "Type of the JS event captured"
},
"interactionType": {
"type": "string",
"description": "Type of interaction this event denotes",
"enum": [
"exploration",
"action"
]
},
"timeStamp": {
"type": "number",
"description": "Time (in milliseconds) at which the event occured"
},
"isTrusted": {
"type": "boolean",
"description": "True when the event was generated by a user action, false otherwise"
},
"altKey": {
"type": "boolean",
"description": "Boolean denoting if the ALT key was down when event occured",
"default": false
},
"ctrlKey": {
"type": "boolean",
"description": "Boolean denoting if the CTRL key was down when event occured",
"default": false
},
"shiftKey": {
"type": "boolean",
"description": "Boolean denoting if the SHIFT key was down when event occured",
"default": false
},
"metaKey": {
"type": "boolean",
"description": "Boolean denoting if the META key was down when event occured",
"default": false
},
"mouseButton": {
"type": "number",
"description": "Which button was pressed on the mouse to trigger the event"
},
"mouseButtons": {
"type": "number",
"description": "Which button were down on the mouse when the event occured"
},
"pageX": {
"type": "number",
"description": "Vertical coordinate within the application's viewport at which the event occurred"
},
"pageY": {
"type": "number",
"description": "Boolean denoting if the SHIFT key was down when event occured"
},
"lomId": {
"type": "string",
"description": "ID of the LOM in which the event occured"
},
"zoneId": {
"type": "string",
"description": "ID of the LOM zone in which the event occured"
},
"viewport": {
"$ref": "#/$defs/Bounds",
"description": "Visible zone of the document body when event occured"
}
},
"required": [
"type",
"interactionType",
"timeStamp",
"isTrusted"
]
}
}
}
C:\Users\pilou\Workspaces\IntelliJ-IDEA\UX-Key\lom-format\lom.schema.json (1:2)