Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2 3 4      [все]
 Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Несколько раз я ходил вокруг этого формата. И облизывался. Я позиционировал его
как замену Excel в бизнес - коммуникациях. Хотелось уйти от передачи маппингов
в Excel к маппингу в csv/json/yaml. Последний стоял как десерт. Но к сожалению
мне самому надо было понять подводные камни. А именно.

- какие могут быть НЕОДНОЗНАЧНОСТИ (случайный пробел или табулятор слева)
- какие сложности с парсером
- композиции (когда внутрь одного документа заворачивают кусок другого (типа CDATA xml).

И вопросы к аудитории

- как вы применяете этот формат на производтсве?
- какие есть pitfalls
- какие либы (у меня только snakeyaml)
- и самое последнее что меня сильно интересеует - кодогенерация и связи с трансляторами ЯП.

+
В качестве примера. Дан некий софистический документ. Анкета некого Майка.

Я сам его написал с изменениями по туториалу. Он - успешно проходит парсинг. Тоесть он - валиден.

person:
  name: "Mike"
  occupation: 'programmer'
  age: 23
  gpa: 3.5
  fav_num: 1e+10
  male: true
  birthday: 1954-01-02 16:44:00 # This is Standard date
  flaws: null
  hobbies:
    - movies
    - bike
    - hacking
    - singing
  movies: ["Star Wars", "Dark Knigth"]
  friends:
    - name: "Jessica" # Woo-hoo
      age: 22
    - { name: "Bob", age: 26 }
  md5: >
    e4d909c290d0fb1 
    ca068ffaddf22cb
    d0
  signature: |
    Mike
    MIT
    mikemike@gmail.com

Что интересно.

Документ - читабелен для человека не из It. All is clear.

Есть две формы представления array.

Формат даты по ISO.

Есть также некий relaxed-json/Hokoon, тоесть
в некотром роде документ обратно совместим с небольшими изменениями с JSon.

Есть также удобства по добавлению сырых данных в виде авто-подписи Майка.


Вобщем докиньте свои 5 коп.
29 апр 20, 11:52    [22124784]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
chpasha
Member

Откуда:
Сообщений: 9207
mayton
замену Excel в бизнес - коммуникациях

по моим наблюдениям excel это единственный формат, который понимает большинство эникейщиков и замены ему не предвидится, какими бы чудесными не были другие форматы. даже когда просишь сохранить в csv из того же excel, половина не понимает чего от них хотят.
29 апр 20, 12:16    [22124809]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mad_nazgul
Member

Откуда:
Сообщений: 5288
mayton,

А как же старый добрый key-value properties :-)
29 апр 20, 12:31    [22124818]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Я уже много лет подковёрно веду борьбу с Excel. Я выкашиваю его косой и вырубаю топором
из проектов там где есть возможность. И у меня на то есть своя аргументация. Но топик не об этом.

Топик вообще о том как согласовать бизнес требования и код.

Современные Business Analysts - ребята очень грамотные. Знают не только Микросовт-Охвис. Они
нормально оперируют R, Statistica, и скриптуют запросики в MSSQL.

И от yaml нас отделяет только несколько брейнштормов и грумингов идей.
29 апр 20, 12:32    [22124822]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Если развернуть этот документ в дерево LinkedHashMap то вот такое получается.

    key = birthday, value = Sat Jan 02 18:44:00 EET 1954

    key = flaws, value = null

    key = hobbies, value = [movies, bike, hacking, singing]

    key = movies, value = [Star Wars, Dark Knigth]

    key = friends, value = [{name=Jessica, age=22}, {name=Bob, age=26}]


Прикольно что дата распозналась именно как дата.
29 апр 20, 13:56    [22124888]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
    void dumpLhm(LinkedHashMap<String, Object> res, int level) {
        res.forEach((key, value) -> {
            if (value instanceof LinkedHashMap) {
                printf("%skey = %s {\n", indent(level), key);
                dumpLhm((LinkedHashMap<String, Object>) value, level + 4);
                printf("}\n", indent(level), key);
            } else {
                printf("%skey = %s, value = %s\n", indent(level), key, String.valueOf(value));
            }
        });
    }

    @Test
    public void testMike() throws FileNotFoundException {
        Yaml yaml = new Yaml();
        LinkedHashMap<String, Object> res = yaml.load(new FileInputStream("src/test/resources/04-mike.yaml"));        
        dumpLhm(res, 0);
    }
29 апр 20, 13:58    [22124891]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Попробовал посериализировать. Стили стали более унылые и плоские.
Кто знает как управлять? Например я не хочу видеть JSon-like форматирование а
хочу такое с bullets как в исходном документе. (в моём первом посту)

+
    public static void main(String[] args) throws IOException, ParseException {
        Map<String, Object> data = new LinkedHashMap<>();
        data.put("name", "Mike");
        data.put("age", 23);
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        data.put("birthday", simpleDateFormat.parse("1954-01-02 16:44:00"));
        data.put("hobbies", new String[] { "movies" , "bike" , "hacking" , "singing" });
        data.put("movies", new Object[] {"Star Wars", "Dark Knigth"});

        data.put("friends", new Object[] {
            new LinkedHashMap() {{
                put("name", "Jessica");
                put("age", 22);
            }},
            new LinkedHashMap() {{
                put("name", "Bob");
                put("age", 26);
            }}
        });

        Yaml yaml = new Yaml();
        FileWriter writer = new FileWriter("build/test.yaml");
        yaml.dump(data, writer);

    }

name: Mike
age: 23
birthday: 1954-01-02T14:44:00Z
hobbies: [movies, bike, hacking, singing]
movies: [Star Wars, Dark Knigth]
friends:
- {name: Jessica, age: 22}
- {name: Bob, age: 26}
29 апр 20, 15:18    [22124969]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
Дмитрий Мух
Member

Откуда: Зеленоград
Сообщений: 3452
mayton
как вы применяете этот формат на производтсве?

Что значит на производстве?

В DevOps скриптах деплоймента, мониторинга и т.п.
29 апр 20, 15:47    [22125001]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Нет. Девопс меня не интересует.

Расскажите о НЕСТАНДАРТНОМ использовании Yaml.
Меня интересует когда Yaml участвует в описании моделей данных.
Энтитей. ДТО. ОРМ-маппинга.

Всё что угодно кроме конфигов.
29 апр 20, 15:52    [22125008]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Управление типизацией (snakeyaml).

+
Я уже выкинул модульный тест. Сделал просто конвертер Yaml=>MOdel=>Yaml.
Просто продолжаю обогащать анкету Майка и смотрю как работает этот pipeline.

In:
person: !!map
  name: "Mike"
  occupation: !!str 'programmer'
  age: !!int 23
  gpa: !!float 3.5
  fav_num: !!float 1e+10
  male: !!bool true
  birthday: !!timestamp 1954-01-02 16:44:00 # This is Standard date


Out:
person:
  name: Mike
  occupation: programmer
  age: 23
  gpa: 3.5
  fav_num: 1.0E10
  male: true
  birthday: 1954-01-02T16:44:00Z
29 апр 20, 18:23    [22125213]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
А вот еще интереснее. Алиасы. У Майка есть брат-близнец Том. Я задаю его дату-рождения через алиасы.

person: !!map
  name: "Mike"
  secondname: &mikesFamily "Thomson"
  occupation: !!str 'programmer'
  age: !!int 23
  gpa: !!float 3.5
  fav_num: !!float 1e+10
  male: !!bool true
  birthday: &mikesBirthday !!timestamp 1954-01-02 16:44:00 # This is Standard date
  flaws: null
  hobbies:
    - movies
    - bike
    - hacking
    - singing
  movies: !!seq ["Star Wars", "Dark Knigth"]
  friends:
    - name: "Jessica" # Woo-hoo
      age: 22
    - { name: "Bob", age: 26 }
    - name: "Tom"
      secondname: *mikesFamily
      birthday: *mikesBirthday


Это похоже на XML entities.

Сообщение было отредактировано: 29 апр 20, 18:31
29 апр 20, 18:32    [22125222]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Есть еще динамическое переопределение алиасов и merge структур. Но мне пока хватит фич. Остановлюсь на этом.
29 апр 20, 18:38    [22125226]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
Valentin Kolesnikov
Member

Откуда:
Сообщений: 3281
mayton
Несколько раз я ходил вокруг этого формата. И облизывался. Я позиционировал его
как замену Excel в бизнес - коммуникациях. Хотелось уйти от передачи маппингов
в Excel к маппингу в csv/json/yaml. Последний стоял как десерт. Но к сожалению
мне самому надо было понять подводные камни. А именно.

- какие могут быть НЕОДНОЗНАЧНОСТИ (случайный пробел или табулятор слева)
- какие сложности с парсером
- композиции (когда внутрь одного документа заворачивают кусок другого (типа CDATA xml).

И вопросы к аудитории

- как вы применяете этот формат на производтсве?
- какие есть pitfalls
- какие либы (у меня только snakeyaml)
- и самое последнее что меня сильно интересеует - кодогенерация и связи с трансляторами ЯП.

+
В качестве примера. Дан некий софистический документ. Анкета некого Майка.

Я сам его написал с изменениями по туториалу. Он - успешно проходит парсинг. Тоесть он - валиден.

person:
  name: "Mike"
  occupation: 'programmer'
  age: 23
  gpa: 3.5
  fav_num: 1e+10
  male: true
  birthday: 1954-01-02 16:44:00 # This is Standard date
  flaws: null
  hobbies:
    - movies
    - bike
    - hacking
    - singing
  movies: ["Star Wars", "Dark Knigth"]
  friends:
    - name: "Jessica" # Woo-hoo
      age: 22
    - { name: "Bob", age: 26 }
  md5: >
    e4d909c290d0fb1 
    ca068ffaddf22cb
    d0
  signature: |
    Mike
    MIT
    mikemike@gmail.com

Что интересно.

Документ - читабелен для человека не из It. All is clear.

Есть две формы представления array.

Формат даты по ISO.

Есть также некий relaxed-json/Hokoon, тоесть
в некотром роде документ обратно совместим с небольшими изменениями с JSon.

Есть также удобства по добавлению сырых данных в виде авто-подписи Майка.


Вобщем докиньте свои 5 коп.


Есть преобразователь для четырёх типов файлов 22122936.

Мы в основном храним данные в xml и property файлах.
Json для обмена данными между сервером и js кодом.

Хорошего вам дня!
29 апр 20, 19:52    [22125307]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Valentin Kolesnikov, спасибо. Посмотрю.
29 апр 20, 19:53    [22125310]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
У меня щас другая проблема. Я пробую продуктовые данные по бизнес-аналитике сохранять в Yaml.
(раньше мы в Json хранили) и вот это горизональное-вертикальное форматирование коллекций
- сильно мешает.

Грубо говоря оно включается по искусственному интеллекту. Видимо следуя какой-то логике улучшения.
Но мне надо его защёлкнуть только на горизонтальном.

Вот это - неправильно.
hobbies:
    - movies
    - bike
    - hacking
    - singing
  movies: ["Star Wars", "Dark Knigth"]


И я пока не вижу выхода как делать кастомный сериализатор. Хотя не хочу.
29 апр 20, 20:03    [22125322]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
Дмитрий Мух
Member

Откуда: Зеленоград
Сообщений: 3452
mayton
Нет. Девопс меня не интересует.

Расскажите о НЕСТАНДАРТНОМ использовании Yaml.
Меня интересует когда Yaml участвует в описании моделей данных.
Энтитей. ДТО. ОРМ-маппинга.

Всё что угодно кроме конфигов.

Для этого используем Json и XML
29 апр 20, 20:17    [22125331]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
hVostt
Member

Откуда:
Сообщений: 17476
mayton
Несколько раз я ходил вокруг этого формата. И облизывался.

mayton
Вобщем докиньте свои 5 коп.


Так себе формат. Чудовищно переусложнён. В следствие этого, нормальной полной поддержки последней версии формата YAML толком нигде нет. И даже если вы её найдёте/реализуете, пользы от этого мало. Ибо применение всех фишечек приведёт к нечитаемости и неупотребимости.

YAML хорошо подходит именно для ручного использования, т.е. для конфигов.

Для передачи данных лучше использовать JSON/BSON/XML.

В общем, никакого профита, кроме как использования для конфига нет.
30 апр 20, 06:55    [22125510]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
hVostt
Member

Откуда:
Сообщений: 17476
mayton
Расскажите о НЕСТАНДАРТНОМ использовании Yaml.
Меня интересует когда Yaml участвует в описании моделей данных.
Энтитей. ДТО. ОРМ-маппинга.


Для описания моделей данных и типизированного хранения данных всё же лучше XML ничего нет.
Так как в XML можно указывать тип данных и любые другие мета-данные, которые ложатся как влитые.

Что-то подобное делать в JSON/YAML -- это будут очередные кривые костыли, основанные на кривых соглашениях. Да и вообще, нафиг оно там не упёрлось.
30 апр 20, 07:00    [22125512]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mad_nazgul
Member

Откуда:
Сообщений: 5288
hVostt
Для описания моделей данных и типизированного хранения данных всё же лучше XML ничего нет.
Так как в XML можно указывать тип данных и любые другие мета-данные, которые ложатся как влитые.


Тут я с вами поспорил.
Т.к. xml/xsd не совсем однозначно может описывать данные/типы.
Как минимум я регулярно сталкиваюсь с тем, что в зависимости от хинтов xjb можно сформировать разные классы.

В этом плане json проще и надежнее.
Три типа - объект, массив, строка.
Их комбинация позволяет передавать любые данные .
Но в нём проблемы с датами.
30 апр 20, 07:57    [22125524]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
hVostt
Member

Откуда:
Сообщений: 17476
mad_nazgul
Тут я с вами поспорил.
Т.к. xml/xsd не совсем однозначно может описывать данные/типы.
Как минимум я регулярно сталкиваюсь с тем, что в зависимости от хинтов xjb можно сформировать разные классы.

В этом плане json проще и надежнее.
Три типа - объект, массив, строка.
Их комбинация позволяет передавать любые данные .
Но в нём проблемы с датами.


Сравните с количеством примитивов в XML

3.2.1 string
3.2.2 boolean
3.2.3 decimal
3.2.4 float
3.2.5 double
3.2.6 duration
3.2.7 dateTime
3.2.8 time
3.2.9 date
3.2.10 gYearMonth
3.2.11 gYear
3.2.12 gMonthDay
3.2.13 gDay
3.2.14 gMonth
3.2.15 hexBinary
3.2.16 base64Binary
3.2.17 anyURI
3.2.18 QName
3.2.19 NOTATION

Т.е. XML может быть самодостаточен для передачи данных и типов данных. Плюс любое количество аннотаций.

JSON не может быть надёжнее, так как информацию о типе не хранит. Но проще, так как примитивов меньше. По сути основное преимущество JSON в простоте и меньшем количестве оверхеда.

Но это не забесплатно.
30 апр 20, 08:14    [22125525]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
hVostt
Member

Откуда:
Сообщений: 17476
mad_nazgul
Их комбинация позволяет передавать любые данные .


Можно передавать только вот это: объект, строка, массив, число, bool и null. Никакие другие данные передавать нельзя.

Т.е. если я вам пришлю какой-нибудь JSON и не расскажу что там лежит, не дам полное описание модели данных с описанием типов, вы не сможете правильно его интерпертировать.
30 апр 20, 08:18    [22125526]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mad_nazgul
Member

Откуда:
Сообщений: 5288
hVostt


Сравните с количеством примитивов в XML

3.2.1 string
3.2.2 boolean
3.2.3 decimal
3.2.4 float
3.2.5 double
3.2.6 duration
3.2.7 dateTime
3.2.8 time
3.2.9 date
3.2.10 gYearMonth
3.2.11 gYear
3.2.12 gMonthDay
3.2.13 gDay
3.2.14 gMonth
3.2.15 hexBinary
3.2.16 base64Binary
3.2.17 anyURI
3.2.18 QName
3.2.19 NOTATION

Т.е. XML может быть самодостаточен для передачи данных и типов данных. Плюс любое количество аннотаций.


Я знаю. Вот только этим всем пользоваться тот еще гемор. Тут кстати еще нет Any и AnyType ;-)

hVostt


JSON не может быть надёжнее, так как информацию о типе не хранит. Но проще, так как примитивов меньше. По сути основное преимущество JSON в простоте и меньшем количестве оверхеда.

Но это не забесплатно.


В этом и прелесть json. Там всего три типа.
И его всегда можно распарсить однозначно в "объект", "массив" или "строку".

Далее строку уже можно парсить как угодно, по каким угодно правилам.

Для передачи данных это более чем достаточно.

С xml/xsd всегда танцы с бубном связанные с xsd.

Одни и те же данные, с одними и теми же xsd в зависимости от используемого marshaller'а будут получаться разные xml. В отличии от json, где боле-менее будет одинаковый json.

По мне так xml/xsd это глюкавый оверхед.

Я пока не разбирался со схемами для json.
Но, например, HateOS смотрится в первом приближении довольно мило.
30 апр 20, 09:50    [22125552]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
Zzz79
Member

Откуда:
Сообщений: 168
hVostt
mayton
Несколько раз я ходил вокруг этого формата. И облизывался.

mayton
Вобщем докиньте свои 5 коп.


Так себе формат. Чудовищно переусложнён. В следствие этого, нормальной полной поддержки последней версии формата YAML толком нигде нет. И даже если вы её найдёте/реализуете, пользы от этого мало. Ибо применение всех фишечек приведёт к нечитаемости и неупотребимости.

YAML хорошо подходит именно для ручного использования, т.е. для конфигов.

Для передачи данных лучше использовать JSON/BSON/XML.

В общем, никакого профита, кроме как использования для конфига нет.

полностью поддерживаю.
ямл для конфигов хорош
а для хранения лучше json
xml уже устарел
30 апр 20, 09:50    [22125553]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mad_nazgul
Member

Откуда:
Сообщений: 5288
hVostt
mad_nazgul
Их комбинация позволяет передавать любые данные .


Можно передавать только вот это: объект, строка, массив, число, bool и null. Никакие другие данные передавать нельзя.


В Json по большому счету нету числа, bool и null. Это все строки.
JavaScript может сделать предположение, что то или иное значение является числом или bool. На там куча странных "умолчаний", которые надо просто знать типа
"true" == true


hVostt

Т.е. если я вам пришлю какой-нибудь JSON и не расскажу что там лежит, не дам полное описание модели данных с описанием типов, вы не сможете правильно его интерпертировать.


Согласен, т.к. JSON это schemaless.
И это хорошо. Как минимум он не дает иллюзии, что у вас есть точное описание протокола передачи данных.
Т.к. xsd это не точное описание, и для него иногда нужны хинты (xjb), которые подсказывают "как правильно" разбирать xsd.

С Json обычно, просто прошу прислать их модель (классы) которые мне посылают.
Обычно они довольно точно описывают, что ко мне прилетит в виде JSON.

С xsd приходилось еще просить парочку примеров на xml, чтобы понять, что мне реально прилетит из несколько интерпретаций xsd-схемы. :-)
30 апр 20, 10:00    [22125555]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mad_nazgul
Member

Откуда:
Сообщений: 5288
Zzz79

полностью поддерживаю.
ямл для конфигов хорош
а для хранения лучше json
xml уже устарел


Он не устарел.
"То что мертво умереть не может"
Просто xml во первых больше чем json при одинаковых данных.
Во вторых xsd это сложный язык описания метаинформации, который дает не однозначный результат.
Помню во времена хайпа soap java'исты отправляли лучи поноса в сторону MS и его подделий, за своеобразную интерпретацию стандартов SOAP.
30 апр 20, 10:04    [22125557]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
XML - это совершенно зрелая и завершенная технология. С большим количеством уровней абстракций.
Прям как стек TCP. На базе нее можно построить все что угодно. К сожалению у нее есть один недостаток.

Она - не human readable. Об этом можно сказать просто посмотрев на форматы офисных документов
через текстовый редактор.

Я-же искал технологию которая позволяет людям "от бизнеса" описывать метадатау в псевдо-текстовом
формате. И далее мы можем такие документы обсуждать. Делать правки прямо в git И затаскивать в проект
в этом первоисходном виде.
30 апр 20, 10:31    [22125566]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
hVostt

Сравните с количеством примитивов в XML

3.2.1 string
3.2.2 boolean
3.2.3 decimal
3.2.4 float
3.2.5 double
3.2.6 duration
3.2.7 dateTime
3.2.8 time
3.2.9 date

Да. Мы когда работали с семантическим вебом (RDF/Xml) из всего этого разнообразия использовали штук 7 типов.
Остальные не пригодились никогда. Вообще для Json пожалуй не хватает только стандартного типа даты-времени.
А так... 80% потребностей он покрывает.
30 апр 20, 10:54    [22125574]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mad_nazgul
Member

Откуда:
Сообщений: 5288
mayton
XML - это совершенно зрелая и завершенная технология. С большим количеством уровней абстракций.
Прям как стек TCP. На базе нее можно построить все что угодно. К сожалению у нее есть один недостаток.


Если говорить за аналогии.
То xml - это реализация модели OSI.
А json как раз это TCP/IP.

<:o)
30 апр 20, 11:38    [22125609]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
mad_nazgul
В этом и прелесть json. Там всего три типа.
И его всегда можно распарсить однозначно в "объект", "массив" или "строку".

Мне иногда в json не хватает простейших вещей. Например камент написать.
# Edited 4/30/2020 mayton
person:
  name: Mike
  secondname: Thomson
  occupation: programmer
  age: 23

Опять-же. Синтаксис завел обязательным двойные кавычки даже в тех случаях когда они не нужны.
friends:
  - {name: Jessica, age: 22}
  - {name: Bob, age: 26}
  - {name: Tom, secondname: Thomson, birthday: !!timestamp '1954-01-02T16:44:00Z'}

Возможно квоты упрощяют сам парсер. Но блин мы живем в 21 веке а следуем оптимизациям
из 80х когда нагрузка на CPU была важна и файловые форматы делались для машин а не для
людей. Обидно спустя 40 лет продолжать способстовать машинным форматам там где уже
давно нет потребностей.

Посмотрите еще для примера Hocon. Это такой-себе расслабленный JSON.

Сообщение было отредактировано: 30 апр 20, 11:40
30 апр 20, 11:41    [22125611]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
По поводу самих JSON парсеров. Мы наблюдали разное поведение при интерпретации целых чисел.
Некоторые парсеры проверяли границы INT32 на целых числах. Некоторые игнорировали.

Парсеры семейства Google(GSON) толератны к квотам и апострофам. Тоесть вы можете писать так
{ "name": "Tom" }

и так.
{ 'name': 'Tom' }

Оба варианта - валидны.
30 апр 20, 11:47    [22125614]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
Zzz79
Member

Откуда:
Сообщений: 168
mad_nazgul
Zzz79

полностью поддерживаю.
ямл для конфигов хорош
а для хранения лучше json
xml уже устарел


Он не устарел.
"То что мертво умереть не может"
Просто xml во первых больше чем json при одинаковых данных.
Во вторых xsd это сложный язык описания метаинформации, который дает не однозначный результат.
Помню во времена хайпа soap java'исты отправляли лучи поноса в сторону MS и его подделий, за своеобразную интерпретацию стандартов SOAP.

я с этим успел столкнуться,причем даже на тестовом задании валидация xml черех xsd
просто какой то кусок говна если честно

сейчас валидация делается в два клика



описываешь ДТО и ставишь над полями нужные анотации

и где принимаешь ставить @Valid

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

не пойму я людей которые анонируют до сих пор на свои xml портянки
30 апр 20, 12:25    [22125640]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
Zzz79
Member

Откуда:
Сообщений: 168
надо посмотреть какой у нас парсер стоит,но наши джейсоны норм скамливаются

вот я вчера валюту заводил в справочник - так она у нас в Integer
отправил сначала "810"
а потом 840
и ничего не сломалось

а вот в случае с какашой ,под названием xml такое бы не прокатило
30 апр 20, 12:28    [22125641]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
XML по возможностям - более широкий. Там это может быть attribute или valueOf.

<fuckenTag fuckenattr1="810">
   840
</fuckenTag>


А кавычки могут просто переносится на уровень твоего проиложения. Тоеть - интерпретируй как хочешь.
А без схемы - все типы данных - строки.
30 апр 20, 12:35    [22125649]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Zzz79

я с этим успел столкнуться,причем даже на тестовом задании валидация xml черех xsd
просто какой то кусок говна если честно

Если хочешь - почитай книжку "Practical RDF". По степени нудности эта книжка порвет
любые философские науки. Очень хорошее снотворное на ночь.
30 апр 20, 12:47    [22125656]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
mad_nazgul
mayton
XML - это совершенно зрелая и завершенная технология. С большим количеством уровней абстракций.
Прям как стек TCP. На базе нее можно построить все что угодно. К сожалению у нее есть один недостаток.


Если говорить за аналогии.
То xml - это реализация модели OSI.
А json как раз это TCP/IP.

<:o)

Я не спорю с универсализмом. JSon - универсален. Но он - не human-readable.
И он мог быть компактнее. Но не стал. К сожалению его идеологи преследовали
низкие и практичные цели - обеспечить интеракцию браузера и вебсокетных
протоколов.
30 апр 20, 17:29    [22125873]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
Zzz79
Member

Откуда:
Сообщений: 168
mayton,я блинова то дочитать никак не могу ) завалили перед праздниками тасками ,устал разгребать
30 апр 20, 17:48    [22125881]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Твой Блинов - это лжец и девственник мы вроде уже установили.

Читай Эккеля, Хорсмана и Брайна Гоетса лучше.
30 апр 20, 18:14    [22125889]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
Ржавый гвоздь
Member

Откуда:
Сообщений: 80
[quot mayton#22125873]
mad_nazgul

Я не спорю с универсализмом. JSon - универсален. Но он - не human-readable.

Это json то не human-readable? По-моему, джейсон - это лучшее, что на сегодняшний день изобрели для описания всяких конфигов и моделей, в том числе и для людей "из бизнеса" по соотношения мощности/удобства использования. XML монструозен и совершенно неудобочитаем и неудобописуем, а yaml - совершенно ужасен из-за форматирования отступами. Можно очень долго вглядываться в кривой yaml в поисках ошибки, которую выкинул парсер, а она в итоге может оказаться вообще не там. Без хорошей IDE с ямлом делать нечено, а она, увы, не всегда доступна.
Джейсон же практически идеален. Единственное, чего в нем не хватает, это комментариев (но их можно криво эмулировать строками), и тогда был бы вообще идеал.
30 апр 20, 18:31    [22125894]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
hVostt
Member

Откуда:
Сообщений: 17476
mayton
Она - не human readable. Об этом можно сказать просто посмотрев на форматы офисных документов
через текстовый редактор.


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

чего не скажешь об YAML


mayton
Я-же искал технологию которая позволяет людям "от бизнеса" описывать метадатау в псевдо-текстовом
формате.


по собственному опыту, людям "от бизнеса" проще всего написать в ворде, а данные предоставить в экселе. всё остальное это головная боль. :)

что YAML, что JSON или XML, людям "от бизнеса" как говорится, "что это херня, что та, и это обе херни такие, что я е...."...
30 апр 20, 20:06    [22125923]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
hVostt
Member

Откуда:
Сообщений: 17476
mayton
Да. Мы когда работали с семантическим вебом (RDF/Xml) из всего этого разнообразия использовали штук 7 типов.
Остальные не пригодились никогда. Вообще для Json пожалуй не хватает только стандартного типа даты-времени.
А так... 80% потребностей он покрывает.


но ведь можно и свои типы определить, с валидацией, и всё это работать будет прям при редактировании. а не к моменту, когда запустится приложение и оно свалится с неприятным эксепшеном.
30 апр 20, 20:06    [22125924]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
hVostt
Member

Откуда:
Сообщений: 17476
Ржавый гвоздь
Это json то не human-readable? По-моему, джейсон - это лучшее, что на сегодняшний день изобрели для описания всяких конфигов и моделей


Не соглашусь.

JSON для конфигов просто омерзителен.
и руки бы по-отрывать, кто решил его таким образом использовать.
30 апр 20, 20:07    [22125925]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Посмотрите примеры конфигураций подсистемы Log4j 2.x

https://logging.apache.org/log4j/2.x/manual/configuration.html

На Yaml. Красиво. Структурно. Читабельно. Как оглавление книги.
Json - омерзителен. Какие-то бесконечные кавычки-скобочки-кавычки.

Сообщение было отредактировано: 30 апр 20, 20:38
30 апр 20, 20:39    [22125944]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
Bsplesk
Member

Откуда:
Сообщений: 157
mayton,

Там в самом низу раздел: System Properties, вот это формат бизнеса.

Самолично наблюдал попытки исправить конфиг yaml без спец. редактора.
Минут в 45 управились.

И это не бизнес, это техподдержка.

Сообщение было отредактировано: 30 апр 20, 21:56
30 апр 20, 21:57    [22125981]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Вы опоздали с предложением.

Может я неверно выразил свою мысль. Но речь идет о компромиссном файловом формате
согласований маппингов который правит и разработчик и не-разработчик. И который (файловый
формат) пригоден для трекания изменений в version control.

Excel - непригоден. Поэтому не стоит вопрос делать или не делать. А стоит вопрос - в каком
наиболее удобном формате это делать.

И это всё - лирика. Давайте вернемся к технической части.
30 апр 20, 22:03    [22125986]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
Bsplesk
Member

Откуда:
Сообщений: 157
mayton,

Что понимаете под маппингами?, а то вы в своём примере "бизнес объекта" - "Анкета", и её экземпляр "Анкета Майка" привели.

Под маппингом обычно подразумевается карта соответствия, грубо говоря вот это поле соответствует в этому 1-1, а вот эти два сложить / поделить на pi и если пусто/отсутствует/NULL, то = 5 вот тому.
И Excel для этого вполне подходит. Графически это выглядит, как таблица, которую можно вести и в confluence. Кстати confluence - это xhtml (xml).

Есть ещё asciidoc/расширенный markdown с таблицами, что больше подходит для git - но парсинга в объекты нормального нет и не будет.

Для людей делайте приложение, которое будет ходить в ваш git брать от туда всё что нужно (xml/json/yaml/mybinary format), отображать в человеческом виде и обратно заливать.

а так можете посмотреть git4c плагин к confluence на github или https://antora.org/.

Сообщение было отредактировано: 30 апр 20, 22:40
30 апр 20, 22:41    [22125998]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Если ты хочешь обсудить форматы markdown - то подними отдельный топик.

Здесь я буду обсуждать yaml.
30 апр 20, 22:56    [22126003]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
Bsplesk
Member

Откуда:
Сообщений: 157
mayton,

ооо, всё понятно ушел.

Не смею больше беспокоить.
30 апр 20, 22:58    [22126006]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
hVostt
Member

Откуда:
Сообщений: 17476
mayton
Посмотрите примеры конфигураций подсистемы Log4j 2.x

https://logging.apache.org/log4j/2.x/manual/configuration.html

На Yaml. Красиво. Структурно. Читабельно. Как оглавление книги.
Json - омерзителен. Какие-то бесконечные кавычки-скобочки-кавычки.


Именно, что как оглавление книги. Если вы не знаете о чём книга, вы и строчки в этот конфиг не добавите. Более того, любые ваши изменения абсолютно невозможно проверить на корректность, пока вы не запустите приложение, которое вас отфутболит с ошибкой.

Читабельно? Нет. Нет никакой информации о типах. Так как файл представляет собой сложную структуру, а не набор параметров, одна ошибка приводит к поломке всего файла.

Тот же INI-файл позволяет делать ошибки, которые не ломают остального.


mayton
Может я неверно выразил свою мысль. Но речь идет о компромиссном файловом формате
согласований маппингов который правит и разработчик и не-разработчик. И который (файловый
формат) пригоден для трекания изменений в version control.


Ну я уже приводил один главный аргумент. Что разработчику, что не-разработчику, даже обезьяне -- нужен самый простой инструмент, который будет помогать, а не мешать.

YAML формат гораздо более строгий, чем JSON. Так как любой редактор JSON тупо подсветит ошибку, если на закрыл скобочку, или забыл про кавычку, а чуть более продвинутый редактор вообще всё это сам генерит.

В YAML лишний пробел меняет семантику, что является наихудшим сценарием.

XML вообще как язык разметки со схемой полностью валидирует всё, что ты вводишь при редактировании, плюс интеллисенс и подсказки.
3 май 20, 00:24    [22126824]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
hVostt
Member

Откуда:
Сообщений: 17476
mayton
И который (файловый
формат) пригоден для трекания изменений в version control.


Что XML, что JSON, что YAML -- трекаются в CVS абсолютно одинаково эффективно.
У нас есть конфиги во всех этих трёх форматах.
Деплой YAML скрипты, JSON и XML конфиги приложений.

Всё очень хорошо трекается везде. Ни у кого никаких преимуществ нет.
Дифф изменений показывает строчки и изменения в строчках. Всё хорошо.
3 май 20, 00:28    [22126825]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
Valentin Kolesnikov
Member

Откуда:
Сообщений: 3281
hVostt
mayton
И который (файловый
формат) пригоден для трекания изменений в version control.


Что XML, что JSON, что YAML -- трекаются в CVS абсолютно одинаково эффективно.
У нас есть конфиги во всех этих трёх форматах.
Деплой YAML скрипты, JSON и XML конфиги приложений.

Всё очень хорошо трекается везде. Ни у кого никаких преимуществ нет.
Дифф изменений показывает строчки и изменения в строчках. Всё хорошо.


Ого, у вас ещё CVS.

CVS — централизованная система управления версиями, популярная в 1990-е — начале 2000-х годов. Хранит историю изменений определённого набора файлов, как правило, исходного кода программного обеспечения, и облегчает совместную работу группы людей над одним проектом. Распространяется на условиях лицензии GNU GPL.
3 май 20, 11:25    [22126865]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
Дмитрий Мух
Member

Откуда: Зеленоград
Сообщений: 3452
Valentin Kolesnikov
hVostt
пропущено...


Что XML, что JSON, что YAML -- трекаются в CVS абсолютно одинаково эффективно.
У нас есть конфиги во всех этих трёх форматах.
Деплой YAML скрипты, JSON и XML конфиги приложений.

Всё очень хорошо трекается везде. Ни у кого никаких преимуществ нет.
Дифф изменений показывает строчки и изменения в строчках. Всё хорошо.


Ого, у вас ещё CVS.

CVS — централизованная система управления версиями, популярная в 1990-е — начале 2000-х годов. Хранит историю изменений определённого набора файлов, как правило, исходного кода программного обеспечения, и облегчает совместную работу группы людей над одним проектом. Распространяется на условиях лицензии GNU GPL.



Нет, у них не Concurrent Versions System.

Он пишет про абстрактную систему контроля/управлениями версиями (от англ. Control Version System, или Version Control System, или Revision Control System).
3 май 20, 15:00    [22126886]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
hVostt

Ну я уже приводил один главный аргумент. Что разработчику, что не-разработчику, даже обезьяне -- нужен самый простой инструмент, который будет помогать, а не мешать.

В настоящий момент у нас трекается Excel. А это ... как вы понимаете просто
изменения blob-ов которые трекать неудобно.

hVostt

YAML формат гораздо более строгий, чем JSON. Так как любой редактор JSON тупо подсветит ошибку, если на закрыл скобочку, или забыл про кавычку, а чуть более продвинутый редактор вообще всё это сам генерит.

В YAML лишний пробел меняет семантику, что является наихудшим сценарием.

Здесь - согласен. Я именно поэтому и поднял тему чтобы обсудить эти маргинальные
случае когда лишний пробел или запятая могут сломать билд.

Но у нас эта фаза на 99% покрыта тестами. Билд не соберется пока количественные
метрики не выйдут на ожидаемые. Например табличка содержит 500 полей. Эти
поля как-раз конфигурируются через Excel.

hVostt

XML вообще как язык разметки со схемой полностью валидирует всё, что ты вводишь при редактировании, плюс интеллисенс и подсказки.


Я уже более десятка лет пытаюсь уйти от XML а вы тащите меня обратно

Ну как вы думаете? Какова будет моя реакция?
3 май 20, 16:05    [22126903]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
dakeiras
Member

Откуда:
Сообщений: 444
говоря о YAML, есть одна важная деталь, которую никто не принимает во внимание. Безальтернативность реализации, по крайней мере на Java.

А именно, для Java я знаю только одну реализацию - Snake Yaml.

Её поддерживает один единственный человек (который её и создал изначально).

Так вот это риск. Формат сложный, реализация сложная.

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

https://bitbucket.org/asomov/snakeyaml/issues/440

В результате одна из важнейших фич YAML (блочный формат) не работает в Jackson и соотв. в Spring, т.к. они используют Snake Yaml, и альтернатив похоже нет.

PS: то что автор не переводит проект на гитхаб тоже concern.
3 май 20, 16:26    [22126910]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Почему безальтернативно?

Я много артефактов нашел https://mvnrepository.com/search?q=yaml

Я не все из них проверял. Но думаю что альтернативы есть.
3 май 20, 16:55    [22126916]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
По дефекту. Мне понадобилось блин 15 минут чтоб понять о чем это вообще?

Кто-ж так оформляет кейсы? Надо как-то чтоб нагляднее было. Хоть строка под строкой.
        String correct   = "this is some text with \"quotes\" abcd";
        String inCorrect = "this is some text with \"quotes\" abcd ";


По поводу статуса дефекта WontFix. Я хочу возмутиться вместе с вами но
мне надо сначала глубже вникнуть в текст стандарта.

Стандартны... такие стандарты. С разночтениями. Мдя...
3 май 20, 17:20    [22126929]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
dakeiras
Member

Откуда:
Сообщений: 444
mayton
...


А в общем мой опыт я Yaml такой:
- Удобен для человекочитаемости для документов среднего размера
- Для больших документов уже нужны подсветки тагов ({}), этого не хватает
- Удобен для человекописания маленьких документов
- Занимает меньше памяти, чем JSON
- Для меня самое важное - блочный формат, который позволяет не экранировать спец. символы:
Например можно выводить поле с тектом в виде JSON без экранирования.
3 май 20, 18:21    [22126941]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
По поводу XML.

Из опыта использования Apache Http Server. У меня нет слов выразить свою тоску и печаль по
поводу вот таких вот конфигов.

<Directory "/var/web/dir1">
    <Files "private.html">
        Require all denied
    </Files>
</Directory>


Этот псевдо-язык очевидно что похож на XML. Неясно чего хотели создатели. Возможно
они базировали конфигурации на HTML/SGML диалектах - но результат - ужасен во всех
своих проявлениях. И наиболее ужасно то что этот результат сохранился на много лет
и актуален и сейчас.

Не лучший вариант конфигов использует nginx. При большом уважении к Сысоеву.
Сам софт - отличный в своём роде но Json - подобный диалект в конфигах также
ломает мозг и порождает длинный вопрос - "Почему" ?
4 май 20, 11:13    [22127135]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
dakeiras
Member

Откуда:
Сообщений: 444
mayton
По поводу XML.

Из опыта использования Apache Http Server. У меня нет слов выразить свою тоску и печаль по
поводу вот таких вот конфигов.

<Directory "/var/web/dir1">
    <Files "private.html">
        Require all denied
    </Files>
</Directory>


Этот псевдо-язык очевидно что похож на XML. Неясно чего хотели создатели. Возможно
они базировали конфигурации на HTML/SGML диалектах - но результат - ужасен во всех
своих проявлениях. И наиболее ужасно то что этот результат сохранился на много лет
и актуален и сейчас.

Не лучший вариант конфигов использует nginx. При большом уважении к Сысоеву.
Сам софт - отличный в своём роде но Json - подобный диалект в конфигах также
ломает мозг и порождает длинный вопрос - "Почему" ?


Это декларативное XML/JSON программирование. В 2000х часто встречалось.

Особенно наши этим грешили. Типа пользователю нельзя давать никакие скрипты делать, пусть пишет XML конфиг))) Апасно!!))

Это то с чем боролась и победила Бобина в логировании.
4 май 20, 16:02    [22127267]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
И ты сюда свою Бобину затащил. Нет уж. Не будем обсуждать.

Брысь!
4 май 20, 18:05    [22127305]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Valentin Kolesnikov

Есть преобразователь для четырёх типов файлов 22122936.

Мы в основном храним данные в xml и property файлах.
Json для обмена данными между сервером и js кодом.

Хорошего вам дня!

Спасибо. Забрал себе ваш бинарник. Хорошая утилита.

XML to JSON, YAML or CSV/JSON to XML, YAML or CSV converter, version 2020-05-04
 -?,--help                                  This help text.
 -c,--config <arg>                          The file with config (it includes src, dest, mask, mode
                                            and format parameters).
 -d,--dest <arg>                            The destination file/directory for converted file(s).
 -de,--delimiter <arg>                      The delimiter for csv files(comma|semicolon|tab|space).
 -df,--dest-format <arg>                    The destination file format(unix|windows|mac).
 -f,--format <arg>                          The format type (2|3|4|tabs|compact).
 -m,--mask <arg>                            The file mask (json|xml|yml|csv|all) for source file(s).
 -mo,--mode <arg>                           The processing file mode (convert|format|check).
 -rm,--remove-minuses-and-convert-numbers   Convert xml to json without minuses.
 -rs,--replace-self-closing-with-null       Convert xml to json self-closing.
 -s,--src <arg>                             The source file/directory which should be converted into
                                            xml/json.
 -t,--type <arg>                            The output file(s) type (json|xml|yaml|csv).
 -w,--watch                                 Watch for directory changes.
 -wa,--without-attributes                   Convert xml to json without attributes.
 -wn,--without-namespaces                   Convert xml to json without namespaces.
For docs, license, tests, and downloads, see: http://javadev.github.io/underscore-java


Конечно мне не хватает управления стилями Yaml.

Под кат заглянут только параноики.
+

Для параноиков.
grant {
      permission java.io.FilePermission "*", "read,write,delete";
      permission java.util.PropertyPermission "user.dir", "read";
      permission java.util.PropertyPermission "java.runtime.name", "read";
};

4 май 20, 21:10    [22127383]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
hVostt
Member

Откуда:
Сообщений: 17476
Valentin Kolesnikov
Ого, у вас ещё CVS.


Ну можно было тупо сказать Git, просто не хотелось обижать SVN-щиков
4 май 20, 22:32    [22127416]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
hVostt
Member

Откуда:
Сообщений: 17476
mayton
hVostt

Ну я уже приводил один главный аргумент. Что разработчику, что не-разработчику, даже обезьяне -- нужен самый простой инструмент, который будет помогать, а не мешать.

В настоящий момент у нас трекается Excel. А это ... как вы понимаете просто
изменения blob-ов которые трекать неудобно.


Вообще и его можно трекать, если хранить его в распакованном виде )))


mayton
Здесь - согласен. Я именно поэтому и поднял тему чтобы обсудить эти маргинальные
случае когда лишний пробел или запятая могут сломать билд.


Так в случае JSON у вас редактор скажет об ошибке. Но не в случае YAML.


mayton
Но у нас эта фаза на 99% покрыта тестами. Билд не соберется пока количественные
метрики не выйдут на ожидаемые. Например табличка содержит 500 полей. Эти
поля как-раз конфигурируются через Excel.


Одно не заменяет другое. Ваши тесты упадут в момент билда, когда агент будет свободен, когда (не)разраб закоммитит и запушит свои изменения. Короче, в тот момент, когда он увидит ошибку из-за лишнего пробела, он будет очень зол.

И материть тех, кто выбрал YAML ))


mayton
Я уже более десятка лет пытаюсь уйти от XML а вы тащите меня обратно

Ну как вы думаете? Какова будет моя реакция?


Да я не тащу. Я выдаю только контр-аргументы.
Против единственного вашего "смотрите как симпатишно!"

Это обманчивое впечатление.
4 май 20, 22:36    [22127417]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
hVostt
Member

Откуда:
Сообщений: 17476
mayton,

Ещё пример списка на YAML:

SomeList:
  - this is first element
  - i'm secod
  - three: simle


Красиво выглядит? нее.... это вам всё сломает ))
4 май 20, 22:38    [22127418]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Кавычки...
4 май 20, 23:11    [22127438]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
hVostt
Member

Откуда:
Сообщений: 17476
mayton
Кавычки...


В том-то и дело, друг.
Дьявол кроется в мелочах.
YAML формат отнюдь не простой.
Любому не-спецу проще выучить JSON с простейшими как тапок правилами, как бы по-уродстки он не выглядел в сравнении с YAML.

А ведь есть ещё JSON5, который совсем преимущества YAML нивелирует.

Поговаривают, что для девопсов YAML стал стандартом для конфигураций только по одной простой причине. Он похож на Python :)
4 май 20, 23:59    [22127452]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Да я совсем забыл про json5.

Ну что же . Будет ещё один вариант.
5 май 20, 08:18    [22127527]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
Valentin Kolesnikov
Member

Откуда:
Сообщений: 3281
mayton
Valentin Kolesnikov

Есть преобразователь для четырёх типов файлов 22122936.

Мы в основном храним данные в xml и property файлах.
Json для обмена данными между сервером и js кодом.

Хорошего вам дня!

Спасибо. Забрал себе ваш бинарник. Хорошая утилита.

XML to JSON, YAML or CSV/JSON to XML, YAML or CSV converter, version 2020-05-04
 -?,--help                                  This help text.
 -c,--config <arg>                          The file with config (it includes src, dest, mask, mode
                                            and format parameters).
 -d,--dest <arg>                            The destination file/directory for converted file(s).
 -de,--delimiter <arg>                      The delimiter for csv files(comma|semicolon|tab|space).
 -df,--dest-format <arg>                    The destination file format(unix|windows|mac).
 -f,--format <arg>                          The format type (2|3|4|tabs|compact).
 -m,--mask <arg>                            The file mask (json|xml|yml|csv|all) for source file(s).
 -mo,--mode <arg>                           The processing file mode (convert|format|check).
 -rm,--remove-minuses-and-convert-numbers   Convert xml to json without minuses.
 -rs,--replace-self-closing-with-null       Convert xml to json self-closing.
 -s,--src <arg>                             The source file/directory which should be converted into
                                            xml/json.
 -t,--type <arg>                            The output file(s) type (json|xml|yaml|csv).
 -w,--watch                                 Watch for directory changes.
 -wa,--without-attributes                   Convert xml to json without attributes.
 -wn,--without-namespaces                   Convert xml to json without namespaces.
For docs, license, tests, and downloads, see: http://javadev.github.io/underscore-java


Конечно мне не хватает управления стилями Yaml.

Под кат заглянут только параноики.
+

Для параноиков.
grant {
      permission java.io.FilePermission "*", "read,write,delete";
      permission java.util.PropertyPermission "user.dir", "read";
      permission java.util.PropertyPermission "java.runtime.name", "read";
};



А где можно почитать про управление стилями Yaml?
5 май 20, 13:11    [22127635]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Я на 100% не уверен что это имеено стили.

Но в SnakeYaml есть DumperOptions
https://www.javadoc.io/doc/org.yaml/snakeyaml/1.19/org/yaml/snakeyaml/DumperOptions.html
и насколько я понимаю он влияет на способ сериализации.

Мне в основном интересно управлять форматированием арреев (горизонтально-вертикально)
и способом представления Maps. Причем задавать это выборочно для некоторых уровней
документа или тегов.
5 май 20, 13:15    [22127638]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Из программных продуктов которые юзают yaml и с которыми я сталкивался.

AWS CloudFormation
Apache Cassandra
Travis
Docker-compose
Spring (YamlConfig) - Теоретически. Тоесть я видел такие конфиги но не юзал.
Log4j 2.x

+все .properties теоретически можно рассматривать как подмножество Yaml.

+ некоторые продукты - опциональню. Тоесть например можно конфигурить AWS Cloud
через JSon или через Yaml как будет удобно.
6 май 20, 10:11    [22127991]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
hVostt
Member

Откуда:
Сообщений: 17476
mayton,

Ну это же по сути формат. Если работа с конфигами/моделями/данными реализована через абстракцию, то YAML, JSON или что-то ещё, это всего лишь соответствующий провайдер.
6 май 20, 13:55    [22128142]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Начал потихоньку применять. В неком простом веб-сервере на базе Jetty у меня был справочник mime types
в формате Java-properties.

# images

gif  : image/gif
png  : image/png
jpg  : image/jpeg
jpeg : image/jpeg
svg  : image/svg+xml
webp : image/webp
ppm  : image/x-pordiv-pixmap
pgm  : image/x-pordiv-graymap
pnm  : image/x-pordiv-anymap

# documents

pdf : application/pdf
djvu : image/x-djvu
xls : application/x-msexcel
doc : application/msword
ppt : application/mspowerpoint

# Video

avi : video/avi
mp4 : video/mp4
mov : video/quicktime
flv : video/x-flv
wmv : video/x-ms-wmv
mkv : video/x-matroska

# sound

mp3 : audio/mpeg
ogg : audio/ogg
aac : audio/aac
wma : audio/x-ms-wma
wav : audio/vnd.wave
flac : audio/flac


Вот интересен после конвертации в Yaml. Я сгруппировал популярные префиксы image/, video/ в группы и получилось красиво.

# Images

image:
  - gif : [ gif ]
  - png : [ png ]
  - jpeg : [ jpeg, jpg ]
  - jp2 : [ jp2, j2k, jpf, jpm, jpg2, j2c jpc]
  - webp : [ webp ]
  - svg : [ svg+xml ]
  - quicktime : [ mov ]
  - x-pordiv-pixmap : [ ppm ]
  - x-pordiv-graymap : [pgm]
  - x-pordiv-anymap : [pnm]
  - x-djvu : [ image ]

# Video:

video:
  - avi : [ avi ]
  - mp4 : [ mp4,m4v ]
  - 3gpp : [ 3gpp, 3gp ]
  - webm : [ webm ]

# Audio

audio:
  - aac : [ aac ]
  - mpeg : [ mp3 ]
  - ogg : [ogg]
  - aac : [aac]
  - vnd.wave : [ wav ]
  - flac : [ flac ]
  - x-ms-wma : [ wma ]

# documents

pdf : application/pdf
xls : application/x-msexcel
doc : application/msword
ppt : application/mspowerpoint


Есть опция. Можно с целью обратной совместимости снова писать как properties.
+ Некоторые расширения дублировали mimetype. Я сделал их массивом.
23 май 20, 17:51    [22138239]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
hVostt
Member

Откуда:
Сообщений: 17476
mayton
image:
  - gif : [ gif ]


Что ж тут красивого-то?

Красиво, это когда интуитивно понятно, семантически верно, очевидно и лаконично.


mayton
gif  : image/gif
png  : image/png
jpg  : image/jpeg


Вот тут всё понятно и очевидно, ничего лишнего.
24 май 20, 01:58    [22138404]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
hVostt

mayton
gif  : image/gif
png  : image/png
jpg  : image/jpeg


Вот тут всё понятно и очевидно, ничего лишнего.

Тут - больше букв.

Давай такой промежуточный вариант. Как улучшить дизайн Yaml-конфига чтобы было "понятно и очевидно" ?
Потому что твоё предложение - это возврат к .properties файлу.
24 май 20, 14:32    [22138542]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
hVostt
Member

Откуда:
Сообщений: 17476
mayton
Тут - больше букв.


Давно, когда я был молодым и зелёным, то был в восторге от разных трюков в С/C++, как можно десяток строчек кода сократить до одной.

Потом начал понимать, что меньше буков -- вовсе не так круто, как мне казалось.


mayton
Давай такой промежуточный вариант. Как улучшить дизайн Yaml-конфига чтобы было "понятно и очевидно" ?
Потому что твоё предложение - это возврат к .properties файлу.


Так зачем улучшать то, что итак хорошо?
Ну реально, давай лучше какой-то другой пример.

Потому что MIME-тип нельзя дербанить на части, он цельный. Именно в таком, цельном виде используется. И даже в шаблонах он цельный: "*/*", "image/*"..

В общем, другой пример нужен.
24 май 20, 17:26    [22138585]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Хорошо. Я подумаю над другим примером. Но ты наверняка видел простыни пропертей вида.

application1.module1.form1.property1 = "FuckenValue1"
application1.module1.form1.property2 = "FuckenValue2"

application1.module2.form1.property1 = yes
application1.module2.form1.property2 = 1


Скажи честно. Разве тебя это не раздражало?
24 май 20, 20:32    [22138646]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
hVostt
Member

Откуда:
Сообщений: 17476
mayton
Скажи честно. Разве тебя это не раздражало?


Не особо. Ну давай перепишем так:

application1:
  - module1:
     - form1:
         - property1: yes
         - property2: 1


Что изменилось? Строчек стало больше. Меньше их никак не станет, так как на каждую пропертю всю равно одна строча. Добавилось проблем. Теперь нужно следить за форматированием.

Плюс ещё семантическая проблема. Сейчас может показаться, что в объекте form1 всего две проперти. Но это не так. В первом случае такой проблемы нет.

Плюс, я уже не могу оперировать так просто. Если пропертей будет больше, чем влезает на экран, то трудно удерживать контекст без специальных средств. Обычного текстового редактора будет недостаточно.
25 май 20, 02:21    [22138750]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4832
mayton
Хорошо. Я подумаю над другим примером. Но ты наверняка видел простыни пропертей вида.

application1.module1.form1.property1 = "FuckenValue1"
application1.module1.form1.property2 = "FuckenValue2"

application1.module2.form1.property1 = yes
application1.module2.form1.property2 = 1


Скажи честно. Разве тебя это не раздражало?
он прав. Но разве это не представление VIEW.
Которое не должно зависеть от данных?
Делай:
Меню-Промотр конфига-Вариант1, вар2, вар3, варN
25 май 20, 10:29    [22138854]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
hVostt
mayton
Скажи честно. Разве тебя это не раздражало?


Не особо. Ну давай перепишем так:

application1:
  - module1:
     - form1:
         - property1: yes
         - property2: 1


Что изменилось? Строчек стало больше. Меньше их никак не станет, так как на каждую пропертю всю равно одна строча. Добавилось проблем. Теперь нужно следить за форматированием.

Плюс ещё семантическая проблема. Сейчас может показаться, что в объекте form1 всего две проперти. Но это не так. В первом случае такой проблемы нет.

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

Ширина среднего экрана была 80 символов для текстового режима дисплея. Это я беру по стандартам 20-го века.
Для современных - я не знаю сколько - но увеличим в 2 раза... 160 символов. Пускай будет.

Для среднего indent в 2 символа который форматирует моя IDE для Yaml я исчерпаю список через 80
рекурсивных уровней таких документов ну (и еще хвостик надо оставить чтоб правая часть не упёрлась
в границу).

Ты можешь себе представить документ с 80 уровнями вложенности? Я даже не помню встречал я такой
в своей практике.
25 май 20, 10:34    [22138857]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
PetroNotC Sharp
Меню-Промотр конфига-Вариант1, вар2, вар3, варN

Не понял. Приведи пример.
25 май 20, 10:35    [22138859]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
hVostt
mayton
Тут - больше букв.


Давно, когда я был молодым и зелёным, то был в восторге от разных трюков в С/C++, как можно десяток строчек кода сократить до одной.

Потом начал понимать, что меньше буков -- вовсе не так круто, как мне казалось.

Я - тоже не сторонник брейнфака. Но мне кажется что .properties очень часто используется не по назначению.
25 май 20, 10:37    [22138862]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4832
mayton,

application1.module1.form1.property1 = "FuckenValue1"
application1.module1.form1.property2 = "FuckenValue2"

application1.module2.form1.property1 = yes
application1.module2.form1.property2 = 1
......... И
application1:
- module1:
- form1:
- property1: yes
- property2: 1
.....
Это внешний вид или VIEW.
Можно выводить тот что понравился юзверю.
О чем спор? Что лучше или хуже?
25 май 20, 10:49    [22138872]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Какой view? Это исходники. Сорцы.
25 май 20, 10:55    [22138876]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4832
mayton
Какой view? Это исходники. Сорцы.
а ты посмотри на них как на view)
ЗЫ
Исходники для человека/прогера/машины?
25 май 20, 11:03    [22138886]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
PetroNotC Sharp
mayton
Какой view? Это исходники. Сорцы.
а ты посмотри на них как на view)
ЗЫ
Исходники для человека/прогера/машины?

Я могу процитировать одного из великих. Он сказал-де

"Исходники пишуться человеком для прочтения других человеков. И лишь в редких случаях для машины"
25 май 20, 11:21    [22138902]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Вот в Spring, если адаптировать application.props в application.yaml эта задача технически уже решена.

А в своем кастомном Jetty-Http ендпоинте я взял следующий props:

gif  : image/gif
png  : image/png
jpg  : image/jpeg
jpeg : image/jpeg
svg  : image/svg+xml
webp : image/webp
ppm  : image/x-pordiv-pixmap
pgm  : image/x-pordiv-graymap
pnm  : image/x-pordiv-anymap


Перевернул его наоборот.

mime.properties
image/png = png  
image/jpeg = jpg


Теперь справочник идёт от mime-type к extension но нам пофиг т.к в процессе старта приложения
один из бинов который является поставщиком mime-typed их все равно переворачивает.

Далее. У меня это приложение группирует обаботку картинок в фолдере. И семантически
мне было удобнее картинки определять как группу. Я городил кастомные группы
внутри .properties пока не понял что в 100% случаев префикс mime-type уже
отвечает на мой вопрос. Если расширение файла - jpg, то он является картинкой
потому-что его тип - "image/jpeg"

Тогда я вынес классы mime-types на уровень выше. Отсюда появилась категория

mime.yaml
image : 
 png : png  
 jpeg : jpg


И денормализация. Я просто объединил онинаковые по смыслу расширения (jpg, jpeg) в список.
так и получились списки.
25 май 20, 11:32    [22138914]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Ну тоесть мои игры с классификатором mime-types это не просто конвертация properties в другой формат.

Это некое переосмысление. Переход от списка к дереву.
25 май 20, 12:26    [22138967]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
asv79
Member

Откуда: Тверь
Сообщений: 3013
mayton
Вот в Spring, если адаптировать application.props в application.yaml эта задача технически уже решена.

.

у нас все конфиги на ямле- очень удобно ,properties не даст такой расширяемости

я могу на примере продемострировать как это круто вышлядит когда нужно масштабировать проект
26 май 20, 18:21    [22139945]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Ну я ищу от ямла не просто пропертей. Это было-бы слишком просто.
26 май 20, 18:38    [22139962]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
asv79
Member

Откуда: Тверь
Сообщений: 3013
mayton,
ну как сказать не просто проперти а возможность сделать base class + наследование
наверняка этому можно и в обычной жизни найти применение
26 май 20, 18:55    [22139975]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Да по сути ничего умнее кроме иерархиеских пропертей я в этом топике не придумаю.
26 май 20, 20:47    [22140081]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
asv79
Member

Откуда: Тверь
Сообщений: 3013
mayton
Да по сути ничего умнее кроме иерархиеских пропертей я в этом топике не придумаю.

а что ты хотел придумать от yml

он хорош тем там можно сделать base class и иерархию
это выглядит реально круто
26 май 20, 21:22    [22140099]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Нет. ООП мне здесь не нужно.

Мне достаточно будет дерева.

И я так и не разобрался как управлять форматированием.
26 май 20, 23:11    [22140138]     Ответить | Цитировать Сообщить модератору
 Re: Семантика Yaml документа.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Вот кстати прилетел полезный кейс. Есть AWS cloudformation scripts. Их основное назначение - конфигурировать
процесс деплоя вашего кода в Amazon. В качестве языков там можно использовать JSon, Yaml.

Типовые конфигурации деплоя для dev/qa/stg сред - это огромные простыни конфигов но они одинаковы
как братья-близнецы. Отличаются только суффиксом. Например если создается aws-lambda-0123 то
для dev конфигурации у нее будет имя aws-lambda-0123-dev.

Планирую внедрить вот этот реплейсмент не уровне технологичном для Yaml. Потому что в нем
такая опция была как минимум заявлена.
сегодня, 14:52    [22143746]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2 3 4      [все]
Все форумы / Java Ответить