Какова лучшая структура данных для хранения фрагментов текста, которые могут быть условно показаны как часть текстового файла?

Давайте настроим сценарий. Это текстовый файл:

INTRODUCTION

Paragraph 01
Paragraph 02
Paragraph 03

SECTION XXXXXX

Paragraph 01
Paragraph 02

SECTION YYYYYY

Paragraph 01

SECTION ZZZZZZ

Paragraph 01
Paragraph 02
Paragraph 03

Каждый абзац может содержать больше абзацев внутри, но давайте сделаем все просто.

Мы хотим программно создавать подобные текстовые файлы, следуя простым правилам:

  • Разделы всегда присутствуют, содержащие хотя бы один абзац
  • Любой абзац может быть показан или не основан на одном или нескольких условиях. Условия определяются как код, оцениваемый по контексту (подумайте о eval функция в Python, например).
  • Контекст будет предоставлен во время выполнения
  • Абзацы могут начинаться с цифры. Таким образом, мы не можем ставить числа как часть абзаца (абзацы могут присутствовать или нет, а их номера должны следовать в правильной последовательности: 1, 2, 3 и т. Д.)

Типы создаваемых текстов - это условия использования, политика конфиденциальности и т. Д. В качестве упрощения - юридические тексты, содержащие более или менее контент, основанный на ответах веб-форм.

РЕДАКТИРОВАТЬ: текст создается отдельно от форм. У нас есть только ответы.

Итак, мой подход - хранить фрагменты текста (абзацы) в виде столбцов базы данных. Каждый столбец вместе с:

  • Положение внутри своей секции
  • Код для оценки в качестве условия. Как уже говорилось, контекст для оценки этого кода будет предоставлен во время выполнения.

Поскольку у нас может быть одно или несколько условий для оценки, чтобы определить, будет ли фрагмент текста включен или нет в окончательный текст, я не уверен в том, какую структуру данных использовать.

Реляционная база данных? Количество столбцов будет динамическим из-за наличия изначально неограниченного количества условий, которые должны оцениваться в каждом случае.

База данных NoSQL?, сохраняя структуру как JSON, содержащий текст + массив условий?

Любой другой подход?

1 ответ

Решение

Я решил проблему с другим подходом.

Мы строим текстовый файл во внешнем интерфейсе, перетаскивая 2 вида виджетов на холст (представляющий содержимое текстового файла):

  • Простые текстовые блоки
  • Условные виджеты: они будут показывать / скрывать фрагмент текста на основе условия, оцениваемого во внешнем интерфейсе во время выполнения (это ключ). Нечто похожее на Angular ng-if,

Затем мы собираем полный текст, также в веб-интерфейсе.

Таким образом, бэкэнд просто хранит куски текста. Нет необходимости переводить условную логику в базу данных. Это даже звучит глупо сейчас...

Другие вопросы по тегам