{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://b2base.eu/schemas/1.0.0-draft.1/person/nameandbirthdetails.schema.json",
  "title": "Name und Geburt",
  "$comment": "B2Base 1.0.0-draft.1. Projektentwurf, kein durch ISO oder andere Normungsgremien verabschiedeter Standard.",
  "type": "object",
  "description": "Internationale Namens- und Geburtsangaben.",
  "properties": {
    "name": {
      "type": "object",
      "description": "Die vollständige Anzeige ist maßgeblich; eine Zerlegung ist optional.",
      "properties": {
        "preferredName": {
          "type": "string",
          "minLength": 1,
          "description": "Vollständiger, von der Person gewünschter Anzeigename; auch ein einzelner Name ist erlaubt."
        },
        "originalScript": {
          "type": "string",
          "minLength": 1,
          "description": "Optionaler vollständiger Originalname, wenn preferredName eine andere Darstellung verwendet."
        },
        "transliteratedName": {
          "type": "string",
          "minLength": 1,
          "description": "Optionale Umschrift; Original niemals damit überschreiben."
        },
        "language": {
          "$ref": "#/$defs/LanguageTag"
        },
        "titles": {
          "type": "array",
          "description": "Optionale Titel.",
          "items": {
            "$ref": "#/$defs/NamePart"
          }
        },
        "givenNames": {
          "type": "array",
          "description": "Optionale Vornamen.",
          "items": {
            "$ref": "#/$defs/NamePart"
          }
        },
        "familyNames": {
          "type": "array",
          "description": "Optionale Familiennamen.",
          "items": {
            "$ref": "#/$defs/NamePart"
          }
        },
        "additions": {
          "type": "array",
          "description": "Optionale weitere Bestandteile.",
          "items": {
            "$ref": "#/$defs/NamePart"
          }
        }
      },
      "required": [
        "preferredName"
      ],
      "additionalProperties": false
    },
    "birthDate": {
      "type": "string",
      "minLength": 1,
      "description": "Vollständig bekanntes Geburtsdatum im gregorianischen Kalender: YYYY-MM-DD.",
      "format": "date"
    },
    "birthDatePartial": {
      "type": "string",
      "minLength": 1,
      "description": "Nur bekanntes Jahr oder Jahr und Monat. Keinen unbekannten Tag erfinden.",
      "pattern": "^[0-9]{4}(-(0[1-9]|1[0-2]))?$"
    },
    "birthDateOriginal": {
      "type": "string",
      "minLength": 1,
      "description": "Optionale Originalangabe einschließlich abweichenden Kalenders; nicht automatisch als gregorianisch auswerten."
    },
    "birthPlace": {
      "type": "object",
      "description": "Bekannte Geburtsortangaben; historische Bezeichnungen bleiben möglich.",
      "properties": {
        "city": {
          "type": "string",
          "minLength": 1,
          "description": "Ort."
        },
        "district": {
          "type": "string",
          "minLength": 1,
          "description": "Ortsteil."
        },
        "stateOrRegion": {
          "type": "string",
          "minLength": 1,
          "description": "Region."
        },
        "province": {
          "type": "string",
          "minLength": 1,
          "description": "Weitere Verwaltungsebene."
        },
        "country": {
          "$ref": "#/$defs/CountryCode"
        },
        "historicalCountryName": {
          "type": "string",
          "minLength": 1,
          "description": "Historische Bezeichnung ohne erfundenen aktuellen Ländercode."
        }
      },
      "additionalProperties": false,
      "minProperties": 1
    },
    "extensions": {
      "type": "object",
      "description": "Vereinbarte Erweiterungen; Schlüssel als absolute URI des Herausgebers. Keine stillschweigende Änderung von Kernfeldern.",
      "properties": {},
      "additionalProperties": true,
      "propertyNames": {
        "format": "uri"
      }
    }
  },
  "required": [
    "name"
  ],
  "additionalProperties": false,
  "not": {
    "required": [
      "birthDate",
      "birthDatePartial"
    ]
  },
  "$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})*$"
    },
    "NamePart": {
      "type": "object",
      "description": "Optionaler Namensbestandteil; keine zwingende westliche Aufteilung.",
      "properties": {
        "value": {
          "type": "string",
          "minLength": 1,
          "description": "Originalschreibweise des Bestandteils."
        },
        "position": {
          "type": "integer",
          "description": "Optionale Position über alle Bestandteile hinweg, beginnend bei 0. Mehrfachvergabe gesondert prüfen.",
          "minimum": 0
        }
      },
      "required": [
        "value"
      ],
      "additionalProperties": false
    },
    "CountryCode": {
      "type": "string",
      "minLength": 1,
      "description": "ISO 3166-1 Alpha-2, Großbuchstaben. Das Muster prüft nur die Schreibweise; zugewiesenen Code und Gültigkeitszeitpunkt gesondert prüfen.",
      "pattern": "^[A-Z]{2}$"
    }
  },
  "examples": [
    {
      "name": {
        "preferredName": "Sukarno"
      },
      "birthDatePartial": "1984"
    },
    {
      "name": {
        "preferredName": "張偉",
        "language": "zh-Hant-TW",
        "transliteratedName": "Zhang Wei"
      },
      "birthDate": "1990-05-10"
    }
  ]
}
