/community.lexicon.annotation.annotation

Lexicon Definitions

{
  "lexicon": 1,
  "id": "community.lexicon.annotation.annotation",
  "defs": {
    "main": {
      "type": "record",
      "description": "A W3C-compliant web annotation. Core entity for highlighting, commenting on, and replying to web resources.",
      "key": "tid",
      "record": {
        "type": "object",
        "required": [
          "target",
          "createdAt"
        ],
        "properties": {
          "target": {
            "type": "array",
            "items": {
              "type": "ref",
              "ref": "#target"
            },
            "minLength": 1,
            "maxLength": 5,
            "description": "The resource(s) being annotated (W3C: target property)"
          },
          "body": {
            "type": "string",
            "maxLength": 10000,
            "maxGraphemes": 5000,
            "description": "The annotation text content (comment, note, etc.)"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 100
            },
            "maxLength": 50,
            "description": "Tags for categorization"
          },
          "document": {
            "type": "ref",
            "ref": "#documentMetadata",
            "description": "Metadata about the document being annotated"
          },
          "createdAt": {
            "type": "string",
            "format": "datetime"
          }
        }
      }
    },
    "target": {
      "type": "object",
      "description": "W3C SpecificResource: what is being annotated",
      "required": [
        "source"
      ],
      "properties": {
        "source": {
          "type": "string",
          "format": "uri",
          "maxLength": 8000,
          "description": "URI of the resource being annotated"
        },
        "selector": {
          "type": "array",
          "items": {
            "type": "union",
            "refs": [
              "#textQuoteSelector",
              "#textPositionSelector",
              "#rangeSelector",
              "#fragmentSelector",
              "#cssSelector",
              "#xpathSelector"
            ]
          },
          "maxLength": 5,
          "description": "How to locate the specific segment (multiple for fallback)"
        }
      }
    },
    "textQuoteSelector": {
      "type": "object",
      "description": "W3C TextQuoteSelector: identifies text by quoting with context",
      "required": [
        "$type",
        "exact"
      ],
      "properties": {
        "$type": {
          "type": "string",
          "const": "community.lexicon.annotation.annotation#textQuoteSelector"
        },
        "exact": {
          "type": "string",
          "maxLength": 5000,
          "description": "The exact text being selected"
        },
        "prefix": {
          "type": "string",
          "maxLength": 500,
          "description": "Text immediately before for disambiguation"
        },
        "suffix": {
          "type": "string",
          "maxLength": 500,
          "description": "Text immediately after for disambiguation"
        }
      }
    },
    "textPositionSelector": {
      "type": "object",
      "description": "W3C TextPositionSelector: character position offsets",
      "required": [
        "$type",
        "start",
        "end"
      ],
      "properties": {
        "$type": {
          "type": "string",
          "const": "community.lexicon.annotation.annotation#textPositionSelector"
        },
        "start": {
          "type": "integer",
          "minimum": 0,
          "description": "Starting character position (inclusive)"
        },
        "end": {
          "type": "integer",
          "minimum": 0,
          "description": "Ending character position (exclusive)"
        }
      }
    },
    "rangeSelector": {
      "type": "object",
      "description": "W3C RangeSelector: defines a range using start/end selectors",
      "required": [
        "$type",
        "startSelector",
        "endSelector"
      ],
      "properties": {
        "$type": {
          "type": "string",
          "const": "community.lexicon.annotation.annotation#rangeSelector"
        },
        "startSelector": {
          "type": "union",
          "refs": [
            "#xpathSelector",
            "#cssSelector",
            "#textPositionSelector"
          ]
        },
        "endSelector": {
          "type": "union",
          "refs": [
            "#xpathSelector",
            "#cssSelector",
            "#textPositionSelector"
          ]
        }
      }
    },
    "fragmentSelector": {
      "type": "object",
      "description": "W3C FragmentSelector: uses URI fragment identifiers",
      "required": [
        "$type",
        "value"
      ],
      "properties": {
        "$type": {
          "type": "string",
          "const": "community.lexicon.annotation.annotation#fragmentSelector"
        },
        "value": {
          "type": "string",
          "maxLength": 2000,
          "description": "Fragment identifier (e.g., 't=30,60', 'section-2')"
        },
        "conformsTo": {
          "type": "string",
          "format": "uri",
          "description": "IRI of the fragment syntax specification"
        }
      }
    },
    "cssSelector": {
      "type": "object",
      "description": "W3C CssSelector: uses CSS selectors for DOM elements",
      "required": [
        "$type",
        "value"
      ],
      "properties": {
        "$type": {
          "type": "string",
          "const": "community.lexicon.annotation.annotation#cssSelector"
        },
        "value": {
          "type": "string",
          "maxLength": 2000,
          "description": "CSS selector string"
        }
      }
    },
    "xpathSelector": {
      "type": "object",
      "description": "W3C XPathSelector: uses XPath for XML/HTML elements",
      "required": [
        "$type",
        "value"
      ],
      "properties": {
        "$type": {
          "type": "string",
          "const": "community.lexicon.annotation.annotation#xpathSelector"
        },
        "value": {
          "type": "string",
          "maxLength": 2000,
          "description": "XPath expression"
        }
      }
    },
    "documentMetadata": {
      "type": "object",
      "description": "Metadata about the document being annotated",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 1000,
          "description": "Document title"
        },
        "doi": {
          "type": "string",
          "maxLength": 500,
          "description": "Digital Object Identifier"
        },
        "canonicalUri": {
          "type": "string",
          "format": "uri",
          "description": "Canonical URI for this document"
        }
      }
    }
  }
}