powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Семантика Yaml документа.
25 сообщений из 94, страница 1 из 4
Семантика Yaml документа.
    #39952771
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Несколько раз я ходил вокруг этого формата. И облизывался. Я позиционировал его
как замену Excel в бизнес - коммуникациях. Хотелось уйти от передачи маппингов
в Excel к маппингу в csv/json/yaml. Последний стоял как десерт. Но к сожалению
мне самому надо было понять подводные камни. А именно.

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

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

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

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

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

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
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 коп.
...
Рейтинг: 0 / 0
Семантика Yaml документа.
    #39952789
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
замену Excel в бизнес - коммуникациях

по моим наблюдениям excel это единственный формат, который понимает большинство эникейщиков и замены ему не предвидится, какими бы чудесными не были другие форматы. даже когда просишь сохранить в csv из того же excel, половина не понимает чего от них хотят.
...
Рейтинг: 0 / 0
Семантика Yaml документа.
    #39952793
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

А как же старый добрый key-value properties :-)
...
Рейтинг: 0 / 0
Семантика Yaml документа.
    #39952795
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я уже много лет подковёрно веду борьбу с Excel. Я выкашиваю его косой и вырубаю топором
из проектов там где есть возможность. И у меня на то есть своя аргументация. Но топик не об этом.

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

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

И от yaml нас отделяет только несколько брейнштормов и грумингов идей.
...
Рейтинг: 0 / 0
Семантика Yaml документа.
    #39952844
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если развернуть этот документ в дерево LinkedHashMap то вот такое получается.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
    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}]



Прикольно что дата распозналась именно как дата.
...
Рейтинг: 0 / 0
Семантика Yaml документа.
    #39952846
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
    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);
    }
...
Рейтинг: 0 / 0
Семантика Yaml документа.
    #39952885
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал посериализировать. Стили стали более унылые и плоские.
Кто знает как управлять? Например я не хочу видеть JSon-like форматирование а
хочу такое с bullets как в исходном документе. (в моём первом посту)

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
    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);

    }


Код: python
1.
2.
3.
4.
5.
6.
7.
8.
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}
...
Рейтинг: 0 / 0
Семантика Yaml документа.
    #39952903
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
как вы применяете этот формат на производтсве?

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

В DevOps скриптах деплоймента, мониторинга и т.п.
...
Рейтинг: 0 / 0
Семантика Yaml документа.
    #39952904
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет. Девопс меня не интересует.

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

Всё что угодно кроме конфигов.
...
Рейтинг: 0 / 0
Семантика Yaml документа.
    #39952991
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Управление типизацией (snakeyaml).

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

In:
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
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:
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
person:
  name: Mike
  occupation: programmer
  age: 23
  gpa: 3.5
  fav_num: 1.0E10
  male: true
  birthday: 1954-01-02T16:44:00Z
...
Рейтинг: 0 / 0
Семантика Yaml документа.
    #39952996
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот еще интереснее. Алиасы. У Майка есть брат-близнец Том. Я задаю его дату-рождения через алиасы.

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
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.
...
Рейтинг: 0 / 0
Семантика Yaml документа.
    #39952998
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть еще динамическое переопределение алиасов и merge структур. Но мне пока хватит фич. Остановлюсь на этом.
...
Рейтинг: 0 / 0
Семантика Yaml документа.
    #39953051
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Несколько раз я ходил вокруг этого формата. И облизывался. Я позиционировал его
как замену Excel в бизнес - коммуникациях. Хотелось уйти от передачи маппингов
в Excel к маппингу в csv/json/yaml. Последний стоял как десерт. Но к сожалению
мне самому надо было понять подводные камни. А именно.

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

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

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

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

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

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
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 кодом.

Хорошего вам дня!
...
Рейтинг: 0 / 0
Семантика Yaml документа.
    #39953054
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentin Kolesnikov, спасибо. Посмотрю.
...
Рейтинг: 0 / 0
Семантика Yaml документа.
    #39953057
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня щас другая проблема. Я пробую продуктовые данные по бизнес-аналитике сохранять в Yaml.
(раньше мы в Json хранили) и вот это горизональное-вертикальное форматирование коллекций
- сильно мешает.

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

Вот это - неправильно.
Код: java
1.
2.
3.
4.
5.
6.
hobbies:
    - movies
    - bike
    - hacking
    - singing
  movies: ["Star Wars", "Dark Knigth"]



И я пока не вижу выхода как делать кастомный сериализатор. Хотя не хочу.
...
Рейтинг: 0 / 0
Семантика Yaml документа.
    #39953062
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Нет. Девопс меня не интересует.

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

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

Для этого используем Json и XML
...
Рейтинг: 0 / 0
Семантика Yaml документа.
    #39953153
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Несколько раз я ходил вокруг этого формата. И облизывался.

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


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

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

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

В общем, никакого профита, кроме как использования для конфига нет.
...
Рейтинг: 0 / 0
Семантика Yaml документа.
    #39953154
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Расскажите о НЕСТАНДАРТНОМ использовании Yaml.
Меня интересует когда Yaml участвует в описании моделей данных.
Энтитей. ДТО. ОРМ-маппинга.


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

Что-то подобное делать в JSON/YAML -- это будут очередные кривые костыли, основанные на кривых соглашениях. Да и вообще, нафиг оно там не упёрлось.
...
Рейтинг: 0 / 0
Семантика Yaml документа.
    #39953159
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Для описания моделей данных и типизированного хранения данных всё же лучше XML ничего нет.
Так как в XML можно указывать тип данных и любые другие мета-данные, которые ложатся как влитые.


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

В этом плане json проще и надежнее.
Три типа - объект, массив, строка.
Их комбинация позволяет передавать любые данные .
Но в нём проблемы с датами.
...
Рейтинг: 0 / 0
Семантика Yaml документа.
    #39953160
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 в простоте и меньшем количестве оверхеда.

Но это не забесплатно.
...
Рейтинг: 0 / 0
Семантика Yaml документа.
    #39953161
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul
Их комбинация позволяет передавать любые данные .


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

Т.е. если я вам пришлю какой-нибудь JSON и не расскажу что там лежит, не дам полное описание модели данных с описанием типов, вы не сможете правильно его интерпертировать.
...
Рейтинг: 0 / 0
Семантика Yaml документа.
    #39953182
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 смотрится в первом приближении довольно мило.
...
Рейтинг: 0 / 0
Семантика Yaml документа.
    #39953183
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
mad_nazgul
Их комбинация позволяет передавать любые данные .


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


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



hVostt

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


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

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

С xsd приходилось еще просить парочку примеров на xml, чтобы понять, что мне реально прилетит из несколько интерпретаций xsd-схемы. :-)
...
Рейтинг: 0 / 0
Семантика Yaml документа.
    #39953185
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79

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


Он не устарел.
"То что мертво умереть не может"
Просто xml во первых больше чем json при одинаковых данных.
Во вторых xsd это сложный язык описания метаинформации, который дает не однозначный результат.
Помню во времена хайпа soap java'исты отправляли лучи поноса в сторону MS и его подделий, за своеобразную интерпретацию стандартов SOAP.
...
Рейтинг: 0 / 0
Семантика Yaml документа.
    #39953189
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XML - это совершенно зрелая и завершенная технология. С большим количеством уровней абстракций.
Прям как стек TCP. На базе нее можно построить все что угодно. К сожалению у нее есть один недостаток.

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

Я-же искал технологию которая позволяет людям "от бизнеса" описывать метадатау в псевдо-текстовом
формате. И далее мы можем такие документы обсуждать. Делать правки прямо в git И затаскивать в проект
в этом первоисходном виде.
...
Рейтинг: 0 / 0
25 сообщений из 94, страница 1 из 4
Форумы / Java [игнор отключен] [закрыт для гостей] / Семантика Yaml документа.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]