{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://b2base.eu/schemas/1.0.0-draft.1/process/document.editor.schema.json",
  "title": "Dokumentmetadaten – Feldübernahme",
  "$comment": "Nur zur Feldübernahme im B2Base-Designer. Struktur-, Listen- und bedingte Regeln sind reduziert; vollständige Prüfung mit https://b2base.eu/schemas/1.0.0-draft.1/process/document.schema.json. Formate außer date/email werden derzeit nicht durch die Runtime geprüft. Freie Daten-/Erweiterungsobjekte benötigen eigene Feldschemata.",
  "type": "object",
  "description": "Beschreibung eines separat gespeicherten Dokuments.",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "description": "Dokumentkennung.",
      "format": "uri"
    },
    "title": {
      "type": "string",
      "minLength": 1,
      "description": "Lesbarer Titel."
    },
    "fileName": {
      "type": "string",
      "minLength": 1,
      "description": "Angezeigter Dateiname; kein freigegebener lokaler Dateipfad."
    },
    "mediaType": {
      "type": "string",
      "minLength": 1,
      "description": "IANA-Medientyp ohne Parameter; tatsächlichen Inhalt separat prüfen.",
      "pattern": "^[A-Za-z0-9!#$&^_.+-]+/[A-Za-z0-9!#$&^_.+-]+$"
    },
    "byteSize": {
      "type": "integer",
      "description": "Dateigröße in Byte, nicht Textzeichen.",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "contentUri": {
      "type": "string",
      "minLength": 1,
      "description": "Verweis auf den Inhalt; Berechtigungen und Abruf werden gesondert geregelt.",
      "format": "uri"
    },
    "sha256": {
      "type": "string",
      "minLength": 1,
      "description": "Optionaler SHA-256-Hash der tatsächlichen Dateibytes.",
      "pattern": "^[a-f0-9]{64}$"
    },
    "language": {
      "$ref": "#/$defs/LanguageTag"
    },
    "createdAt": {
      "type": "string",
      "minLength": 1,
      "description": "Erstellungszeitpunkt.",
      "format": "date-time"
    },
    "relatedParty": {
      "$ref": "#/$defs/PartyRef"
    },
    "extensions": {
      "type": "object",
      "description": "Vereinbarte Erweiterungen; Schlüssel als absolute URI des Herausgebers. Keine stillschweigende Änderung von Kernfeldern.",
      "properties": {}
    }
  },
  "required": [
    "id",
    "title",
    "mediaType",
    "contentUri"
  ],
  "$defs": {
    "LanguageTag": {
      "type": "string",
      "minLength": 1,
      "description": "BCP-47-Sprachtag, etwa de, zh-Hant-TW, sr-Latn oder x-internal. Das Muster prüft nur die Grundform, nicht Registrierung oder alle BCP-47-Regeln.",
      "pattern": "^[A-Za-z]{1,8}(-[A-Za-z0-9]{1,8})*$"
    },
    "PartyRef": {
      "type": "object",
      "description": "Verweis auf eine separat gespeicherte Person oder juristische Person; kein JSON-Schema-Verweis.",
      "properties": {
        "entityType": {
          "type": "string",
          "minLength": 1,
          "description": "Art der referenzierten Einheit.",
          "enum": [
            "person",
            "legalEntity"
          ]
        },
        "id": {
          "type": "string",
          "minLength": 1,
          "description": "Stabile absolute URI oder URN des Datensatzes, nicht dessen Name.",
          "format": "uri"
        },
        "name": {
          "type": "string",
          "minLength": 1,
          "description": "Optionale Anzeige; nicht als Identitätsschlüssel verwenden."
        }
      },
      "required": [
        "entityType",
        "id"
      ]
    }
  },
  "examples": [
    {
      "id": "urn:example:document:42",
      "title": "Antragsunterlagen",
      "fileName": "申請.pdf",
      "mediaType": "application/pdf",
      "contentUri": "https://example.org/documents/42",
      "language": "ja"
    }
  ]
}
