Русское издание для чтения. Нормативным источником остаётся оригинал на английском, сверенный с ревизией
61e75e9aa9a8719dfb480bf1f5226553b3a21d70. Перевод не вводит новую редакцию спецификации.
Два зафиксированных нормативных документа объявляют одну и ту же версию OKF 0.2. Исходная ревизия knowledge-catalog 3fcbb9f использует календарные даты для stale_after, sources[].last_modified и обеих форм usage_window. Ревизия open-knowledge-format 0b87c52 использует для этих полей дату и время ISO 8601 со смещением часового пояса и правило now >= stale_after. Содержимое и хеши зафиксированы в fixtures/v02/spec-lock.json и fixtures/v02/spec-lock-instant.json.
Одного okf_version недостаточно для выбора временных правил. Определять ревизию по одному значению тоже нельзя: набор может не содержать этих необязательных полей или одновременно содержать даты и значения даты со временем.
Инструментарий вводит два временных профиля: date-3fcbb9f и instant-0b87c52. Первый остаётся профилем по умолчанию в существующих контрактах Go, CLI, MCP и графа. Второй выбирается явно через новое поле профиля или аргумент. Отчёты и метаданные графа показывают выбранный профиль. Профиль применяется ко всему набору документов, даже если часть необязательных полей отсутствует.
Старые методы доступа DateValue и семантика IsStale сохраняют интерпретацию календарных дат. Новые наблюдения с учётом профиля сохраняют исходное скалярное значение, форму семейства YAML и точный момент time.Time. Профиль моментов времени принимает представление RFC 3339 со смещением (Z или ±HH:MM) и необязательной дробной частью секунд. Это документированное совместимое подмножество ISO 8601. Парсер Go отклоняет значения без часового пояса, недопустимые смещения, -00:00 как обозначение неизвестного смещения и дополнительные секунды. Цифры дробной части сохраняются в Raw; time.Time обеспечивает точность сравнения до наносекунд. Поддержка всех представлений ISO 8601 не заявляется.
В профиле моментов времени stale_after означает устаревание начиная с указанного точного момента включительно. Условие usage_window.from <= usage_window.to сравнивает моменты; равные границы допустимы. Интервал представляет наблюдаемый диапазон, без автоматического расширения до конца дня. В строгом режиме валидатор по-прежнему сообщает проблемы формы этих необязательных семейств как рекомендации, сохраняя установленную для 0.2 границу серьёзности ошибок.
Старая дата не содержит ни часового пояса, ни времени суток. Инструментарий никогда не выводит из неё момент времени. Без явного сопоставления для преобразования предварительный план обновления ревизии отмечает значение как неразрешённое, а применение не может опубликовать незавершённое обновление. Сопоставление задаётся для каждого временного семейства, включая обе границы окна использования, и записывается как политика пользователя, а не восстановленный факт. Существующая миграция v0.1 → v0.2 сохраняется.
Существующая проекция графа skosovsky/okf-v0.2 сохраняет xsd:date и точные старые байты. Проекция моментов времени — отдельный контракт с xsd:dateTime. Существующие канонические метки наборов изменений и значения старых операций сохраняют идентичность и хеш; новая временная операция должна использовать дополнительную метку или оболочку с явно заданной версией.
Профиль по умолчанию продолжает интерпретировать набор с одними датами как прежде. Для новой ревизии спецификации потребитель обязан явно выбрать профиль моментов времени. Создатели наборов для этого профиля записывают только значения даты и времени со смещением. Смешанный набор получает предупреждения выбранного профиля и автоматически не нормализуется. При отсутствии as_of состояние устаревания остаётся неизвестным; текущее время системы не используется. Значение as_of, содержащее только дату, допустимо лишь для профиля дат; профиль моментов требует дату и время. JSON-вывод использует форму даты или даты и времени со смещением согласно профилю и сохраняет точность момента до наносекунд.
Повторное использование идентификатора 0.2 делает явный профиль необходимым до появления однозначного маркера ревизии в исходной спецификации. Профиль является метаданными инструментария, а не выдуманной версией OKF или новым ключом вводных метаданных.