Használat
Fogalmak
YAML (a rekurzív betűszó for "YAML Ain't Markup Language") egy ember által olvasható adat-sorosítási nyelv.
Általában tehát használják konfigurációs fájloknál és olyan alkalmazásokban, ahol adatokat tárolnak vagy továbbítanak, hasonlóan minta XML, JSON, properties filek esetén.
A YAML ugyanazokat a kommunikációs alkalmazásokat célozza meg, mint a Bővíthető jelölőnyelv (XML), de minimális szintaxisa van, amely szándékosan különbözik ettől SGML.
A YAML tehát elfogadja a teljes Unicode karakterkészletet, néhány kivételével vezérlő karakterek, és kódolható UTF-8, UTF-16 és UTF-32.
Szintaktikai értelmezés:
Például
kulcs: érték
masik_kulcs: Másik érték jön ide.
egy_szam: 100
tudomanyos_jelolessel: 1e+12
boolean: true
null_value: null
kulcs benne szóközökkel: érték
# Látható, hogy a sztringeket nem szükséges idézőjelek közé zárni, bár szabad.
Továbbá: "Idézőjelekkel megadott sztring."
"A kulcs is lehet idézőjeles.": "Hasznos lehet, ha ':'-ot akarsz a kulcsban."
# A kommentek YAML-ban is így néznek ki.
# A gyökér objektumunk egy map (hasonlóan a dictionary, hash
vagy object)
Egyszerű típusok megadási szerkezete kulcs értékpárokkal
történik
kulcs: érték
masik_kulcs: Másik érték jön ide.
egy_szam: 100
tudomanyos_jelolessel: 1e+12
boolean: true
null_value: null
kulcs benne szóközökkel: érték
A sztringeket nem szükséges idézőjelek közé
zárni, bár szabad.
Továbbá: "Idézőjelekkel megadott sztring."
"A kulcs is lehet idézőjeles.": "Hasznos
lehet, ha ':'-ot akarsz a kulcsban."
# Többsoros sztringek írhatóak 'literal block'-ként ('|' jelet használva) vagy 'folded block'-ként is ('>' jelet használva).
literal_block: |
Ez az egész szöveg-blokk lesz az értéke a literal_block kulcsnak, a sortöréseket megtartva.
folded_style: >
Az az egész szöveg-blokk lesz az értéke a 'folded_style' kulcsnak, de ezúttal minden sortörés egy szóközre lesz cserélve.
Különleges kulcs használatok
# A mapeknek nem csak sztring kulcsaik lehetnek.
0.25: lebegőpontos kulcs
# A kulcsok lehetnek többsoros objektumok is, ? jellel
jelezve a kulcs kezdetét
? |
Ez itt egy
többsoros kulcs
: és ez az értéke
# Szintén engedélyezett a kollekció típusok használata
kulcsként, de egyéb nyelvekben ez
gyakran problémákat fog okozni.
A Gyűjtemény típusok megadásánál a struktúra is fontos
# Itt az egymásba ágyazás a behúzás változtatásával érhető
el.
beagyazott_map: ## kezdő szint (megjegyzés)
key: value
another_key:
Another Value
masik_beagyazott_map: ##
másik szint (megjegyzés)
hello: hello
Listák megadása (szekvenciák, listákkal vagy tömbökkel
egyenértékűek)
egy_szekvencia:
- Item 1
- Item 2
- 0.5 ## Többféle típust is tartalmazhat (megjegyzés)
- Item 4
- key: value
another_key:
another_value
-
- Ez egy
szekvencia
- egy másik
szekvenciába ágyazva
# A YAML a JSON befoglaló halmazát alkotja, ezért elfogadja
a JSON szintaxisú mapek és szekvenciák is használatát:
json_map: {"key": "value"}
json_seq: [3, 2, 1, "takeoff"]
Különleges YAML képességek
# A YAML-ben ún. 'anchor'-ök segítségével könnyen lehet
duplikálni a tartalmakat a dokumentumon
belül. A következő kulcsok azonos értékkel bírnak:
anchored_tartalom: &anchor_neve Ez a sztring két kulcs
értéke is lesz.
másik_anchor: *anchor_neve
# Vannak a YAML-ben tagek is, amivel explicit lehet
típusokat jelölni.
explicit_string: !!str 0.5
# Bizonyos implementációk nyelv-specifikus tageket
tartalmaznak, mint
# például ez a Python komplex szám típusának jelölésére:
python_complex_number: !!python/complex 1+2j
Összevetés (json, yaml, hjson)
JSON
{ 'first_name': 'John', 'last_name': 'Smith', 'age': 25, 'address': { 'street_address': '21 2nd Street', 'city': 'New York', 'state': 'NY', 'postal_code': '10021' }, 'phone_numbers': [ { 'type': 'home', 'number': '212 555-1234' }, { 'type': 'fax', 'number': '646 555-4567' } ], 'sex': { 'type': 'male' } }
YAML
first_name: John last_name: Smith age: 25 address: street_address: 21 2nd Street city: New York state: NY postal code: '10021' phone_numbers: - type: home number: 212 555-1234 - type: fax number: 646 555-4567 sex: type: male
hjson
{ first_name: John last_name: Smith age: 25 address: { street_address: 21 2nd Street city: New York state: NY postal_code: 10021 } phone_numbers: [ { type: home number: 212 555-1234 } { type: fax number: 646 555-4567 } ] sex: { type: male } }
Adatpéldák a Wikipédiából
Minta:
https://github.com/klajosw/python/blob/master/kl_py_yaml_01.ipynb
Megjegyzések
Megjegyzés küldése