Использование файла Yaml в качестве простой записи скрипта - PullRequest
0 голосов
/ 24 января 2020

Я пытаюсь создать простой способ создания сценариев для выполнения некоторых задач одна за другой - что-то похожее на Gcodes на машинах CN C. При первом запуске я получаю YAML и пытаюсь создать схему, которая позволяет мне создавать несколько очень похожих (или идентичных) линий, но я отскочил от стены. В YAML каждый объект должен быть уникальным. Как мне подготовить схему? Можно ли повторить эти объекты?

Для чтения я использую cpp-yaml lib.

Это пример моего YAML:

Drawer:
  uid: W1
  cmd: out

Drawer:
  uid: W2
  cmd: in

Heater:
  id: H1
  duty: 5
  temp: 4
  time: 2

Heater:
  id: H2
  duty: 1
  temp: 33
  time: 15

Как схема. json Я пробовал обе следующие конфигурации:

"properties": {
    "Heater": {

и

"definitions": {
   "Acctuator": {

1 Ответ

1 голос
/ 24 января 2020

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

- !Drawer
  uid: W1
  cmd: out

- !Drawer
  uid: W2
  cmd: in

- !Heater
  id: H1
  duty: 5
  temp: 4
  time: 2

- !Heater
  id: H2
  duty: 1
  temp: 33
  time: 15

Я использовал теги YAML для указания типа задачи, как YAML различает разные типы данных , Вместо этого вы можете использовать встроенное отображение в каждом элементе последовательности, например:

- Drawer:
    uid: W1
    cmd: out

Если вы хотите использовать схему JSON для описания содержимого вашего файла, вы не можете использовать теги YAML, потому что они не являются JSON особенность. Однако, на самом деле, единственная реализация JSON Schema, которая работает с файлами YAML, находится в JavaScript, так что вы все равно не сможете использовать ее в C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...