la CSSa kadra YAMLa la CSSa kadra YAMLa Ŝablono:Mallonga priskriba Ŝablono:Infobox dosiera formato

YAML (/ˈjæməl/ kaj Ŝablono:Respell) (vidas Ŝablono:Slink) estas homa-legebla datumo-seriiĝada lingvo. Ĝi estas ofte uzita por konfiguracia dosieros kaj en aplikoj kie datumoj estas estanta entenita aŭ elsendita. YAML celas multaj de la samaj komunikadaj aplikoj kiel Extensible Markup Lingva (XML) sed havas minimuman sintakson kiu intence malsamas de Normo Induktis Markup Lingva (SGML).[1] Ĝi uzas ambaŭ Python-stilo indentation indiki nestadon kaj pli kompakta formato kiu uzas Ŝablono:Kodon Por listoj kaj

{...}

Por mapoj[1] kaj tiel JSONaj dosieroj estas valida YAML 1.2.[2]Laŭmendaj datumaj tipoj estas permesita, sed YAML natively kodas scalars (kiel ŝnuroj, integraloj kaj flosigas), listojn kaj associative aroj (ankaŭ sciita kiel mapoj, vortaroj aŭ hashes). Ĉi tiuj datumaj tipoj estas bazita sur la Perl programara lingvo, kvankam ĉiuj ofte uzis altan-nivela programaro lingvoj dividas tre similaj konceptoj.[3][4][5] La dupunkto-centrita sintakson, uzita por esprimanta ŝlosilo-valora paros, estas inspirita de elektronikaj poŝtaj titoloj kiel difinita en Ŝablono:IETFa RFC kaj la dokumenta apartigilo

---

estas depruntita de MIMEa (Ŝablono:IETF RFC). Eskapaj sinsekvoj estas reused de C kaj whitespace volvaĵo por multi-liniaj ŝnuroj estas inspirita de HTML. Listoj kaj hashes povas enhavi nestita listojn kaj hashes, formanta [[arban strukturon; arbitra grafeoj povas esti reprezentita uzanta YAML aliases (simila al XML en SAPO).[1] YAML estas celita esti legita kaj skribita en riveretoj, ĉefaĵo inspirita de SAX.[1]Subteno por leganta kaj skribanta YAML estas havebla por multaj programaraj lingvoj.[6] Iu fonto-kodaj redaktoroj kiel Vim,[7] Emacs,[8] kaj diversa [[integra evoluada medios[9][10][11] havas ĉefaĵojn kiu faras redaktanta YAML pli facila, kiel faldanta supre nestita strukturojn aŭ aŭtomate reliefiganta sintaksajn erarojn. La oficiala rekomenda filename etendaĵo por YAMLaj dosieroj estis

.Yaml

ekde 2006.[12]==Historio kaj noma==

YAML (Ŝablono:IPAc-en, rimoj kun camel[2]) estis unue proponita de Clark Evans en 2001,[13] kiu desegnis ĝin kune kun Ingy döt Reto[14] kaj Oren Ben-Kiki.[14] Originale YAML estis dirita signifi Sed tamen Alia Markup Lingvo,[15] ĉar ĝi estis liberigita en epoko kiu vidis dismultiĝon de markup lingvoj por prezento kaj konektebleca (HTML, XML, SGML, ktp.). Ties komenca nomo estis celita kiel ŝerca referenco[16] al la teknologia pejzaĝo, referencanta ties celon kiel markup lingvo kun la ankoraŭ alia konstruas, sed ĝi estis tiam repurposed kiel YAML ne Estas Markup Lingvo, recursive akronimo, distingi ties celon kiel datumo-oriented, prefere ol dokumento markup.

Versioj redakti

Versio Elkarceriga dato
YAML 1.0 29-a de januaro 2004
YAML 1.1 18-a de januaro 2005
YAML 1.2.0 21-a de julio 2009
YAML 1.2.1 1-a de oktobro 2009
YAML 1.2.2 1-a de oktobro 2021

Desegno redakti

Ŝablono:Mana

Sintakso redakti

trompanta folio kaj plena specifo estas havebla ĉe la oficiala ejo.[17] La sekvantaro estas synopsis de la bazaj elementoj.

YAML akceptas la tutan Unicode karaktera aro, esceptas por iu [[kontrola karakteros kaj povas esti kodita en iu ajn de UTF-8, UTF-16UTF-32. (Kvankam UTF-32 ne estas deviga, ĝi estas postulita por parser havi JSONan kongruecon.)[18]* Whitespace indentation estas uzita por indikanta strukturon; tamen, klapeta karakteros ne estas permesita kiel parto de tiu indentation.

  • Rimarkoj komencas kun la [[nombra signa kodo ({{|#}}), povas komenci anywhere sur linio kaj daŭri ĝis la fino de la linio. Rimarkoj devas esti apartigita de alia tokens de whitespace karakteroj.[19] Se # karakteroj aperas interne de ŝnuro, tiam ili estas nombra signo (#) literals.
  • Listaj membroj estas indikita de eminenta Dividostreko dividostreka (-) kun unu membro por linio.
  • Associative ara eniro estas reprezentita uzanta dupunkta spaco en la formo ŝlosilo: valoro kun unu eniro por linio. YAML postulas la dupunkton esti sekvita de spaco por ke url-stilaj ŝnuroj kiel http://www.wikipedia.org povas esti reprezentita sen devanta esti enfermita en citaĵoj.
    • [[Demanda marko povas esti uzita antaŭ ŝlosilo, en la formo "?Ŝlosilo: valoro" permesi la kernan enhavi eminentajn kuregojn, kvadrataj konzoloj, ktp., sen citaĵoj.
    • Associative aro ankaŭ povas esti specifita de teksto enfermita en bukla stega ({...}), Kun ŝlosiloj apartigita de valoroj de dupunkto kaj la eniroj apartigita de komaj (spacoj ne estas postulita reteni kongruecon kun JSON).
  • Ŝnuros (unu tipo de scalar en YAML) estas kutime unquoted, sed povas esti enfermita en duoblo-citaĵa (") aŭ ununura-citaĵa (').
    • Ene de duobla-citaĵoj, specialaj karakteroj povas esti reprezentita kun C-stila eskapo sinsekvoj komencanta kun backslash (\). Laŭ la dokumentaro la nura octal eskapo subtenita estas \0.
    • Ene de ununuraj citaĵoj la nur subtenita eskapan sinsekvon estas duobligita ununuran citaĵan (Ŝablono:Kodon) indikanta la ununuran citaĵon ĝi mem kiel en 'surmetas''t'.
  • Bloko scalars estas delimited kun indentation kun laŭvolaj modifiloj konservi (|) aŭ falda (>) newlines.
  • Multoblaj dokumentoj ene de ununura rivereto estas apartigita de tri dividostreka (---).
    • Tri periodoj (...) Optionally finas dokumenton ene de rivereto.
  • Ripetaj nodoj estas komence indikita de ampersand (&) kaj poste referencita kun [[asteriska kodo ({{|}}).
  • Nodoj povas esti labeled kun tipo aŭ etikedo uzanta duoblan ekkrian markan kodon ({{|!!}}) Sekvita de ŝnuro, kiu povas esti vastigita en URI.
  • YAMLaj dokumentoj en rivereto povas esti antaŭirita de 'instrukcioj' kunmetita de [[procenta signa kodo ({{|%}}) sekvita de nomo kaj spaciala-delimited parametroj. Du instrukcioj estas difinita en YAML 1.1:
    • La %YAMLa %instrukcio estas uzita por identiganta la version de YAML en donita dokumenton.
    • La %ETIKEDA %instrukcio estas uzita kiel mallongirejo por URIaj prefiksoj. Ĉi tiuj mallongirejoj tiam povas esti uzita en noda tipo etikedoj.

Bazaj eroj redakti

Tradicia bloka formato uzas dividostrekan spacon+ komenci novan eron en listo.

--- # Favorite movies
- Casablanca
- North by Northwest
- The Man Who Wasn't There

Laŭvola enteksta formato estas delimited de koma+spaco kaj enfermita en konzoloj (simila al JSON).[20]

--- # Shopping list
[milk, pumpkin pie, eggs, juice]

Ŝlosiloj estas apartigita de valoroj de dupunkta spaco+. Indented blokoj, ofta en YAMLa datumo dosieroj, uzo indentation kaj novaj linioj apartigi la kernajn valorajn/parojn. Entekstaj Blokoj, ofta en YAMLa datumo riveretoj, uza komo+spaco apartigi la kernajn valorajn/parojn inter stegoj.

--- # Indented Block
  name: John Smith
  age: 33
--- # Inline Block
{name: John Smith, age: 33}

Ŝnuroj ne postulas citaĵajn markojn. Estas du vojoj skribi multi-liniaj ŝnuroj, unu konservanta newlines (uzanta la | karaktero) kaj unu kiu faldas la newlines (uzanta la {{kodan Ŝablono:Karakteron ), ambaŭ sekvita de newline karaktero.

data: |
   There once was a tall man from Ealing
   Who got on a bus to Darjeeling
       It said on the door
       "Please don't sit on the floor"
   So he carefully sat on the ceiling

De nerepago, la eminenta indentation (de la unua linio) kaj sekvanta whitespace estas malkovrita, kvankam alia konduto povas esti eksplicite specifita.

data: >
   Wrapped text
   will be folded
   into a single
   paragraph

   Blank lines denote
   paragraph breaks

Faldita tekston transformas newlines al spacoj kaj forigas gvidanta whitespace.

--- # The Smiths
- {name: John Smith, age: 33}
- name: Mary Smith
  age: 27
- [name, age]: [Rae Smith, 4]   # sequences as keys are supported
--- # People, by gender
men: [John Smith, Bill Jones]
women:
  - Mary Smith
  - Susan Williams

Objektoj kaj listoj estas gravaj eroj en yaml kaj povas esti miksita. La unua ekzemplo estas listo de kerna-valoraj objektoj, ĉiuj homoj de la Forĝista familio. La sekundo enlistigas ilin de sekso; ĝi estas kerna-valora objekto enhavanta du listojn.

Altnivelaj eroj redakti

Du ĉefaĵoj kiu distingas YAML de la kapabloj de alia datumo-seriiĝadaj lingvoj estas strukturoj[21] kaj datumo tajpanta.

YAMLaj strukturoj ebligas tenadon de multoblaj dokumentoj ene de ununura dosiero, uzado de referencoj por ripetaj nodoj kaj uzado de arbitraj nodoj kiel ŝlosiloj.[21]Por klareco, compactness kaj evitanta datuman eniron eraroj, YAML provizas nodajn ankrojn (uzanta Ŝablono:Kodon) kaj referencoj (uzanta Ŝablono:Kodon). Referencoj al la ankra laboro por ĉiuj datumaj tipoj (vidas la ŝipon-referenci en la ekzemplo sub).

Malsupre estas ekzemplo de atendovico en instrumento sequencer en kiu du paŝoj estas reused multfoje sen estanta plene priskribita ĉiun tempon.

--- # Sequencer protocols for Laser eye surgery
- step:  &id001                  # defines anchor label &id001
    instrument:      Lasik 2000
    pulseEnergy:     5.4
    pulseDuration:   12
    repetition:      1000
    spotSize:        1mm

- step: &id002
    instrument:      Lasik 2000
    pulseEnergy:     5.0
    pulseDuration:   10
    repetition:      500
    spotSize:        2mm
- Instrument1: id001                   # refers to the first step (with anchor &id001)
- Instrument2: id002                   # refers to the second step

Eksplicita datumo tajpanta estas neofte vidita en la plimulto de YAMLaj dokumentoj ekde YAML autodetects simplaj tipoj. Datumaj tipoj povas esti disigita en tri kategorioj: kerna, difinita kaj uzanto-difinita. Kerno estas ones atendita ekzisti en ajna parser (ekz. flosigas, ints, ŝnuroj, listoj, mapoj, ...). Multaj pli altnivelaj datumaj tipoj, kiel binara datumo, estas difinita en la YAMLa specifo sed ne subtenita en ĉiuj efektivigoj. Fine YAML difinas vojon etendi la datumajn tipajn difinojn loke akomodi uzanton-difinita klasojn, strukturoj aŭ primitives (ekz. quad-precizeco flosigas). YAML autodetects la datatype de la ento, sed foje unu deziras ĵeti la datatype eksplicite. La plej ofta situacio estas kie ununura-vorta ŝnuro kiu similas nombron, boolea aŭ etikedo postulas disambiguation de ĉirkaŭiganta ĝin kun citaĵoj aŭ uzanta eksplicitan datatype etikedo.

---
a: 123                     # an integer
b: "123"                   # a string, disambiguated by quotes
c: 123.0                   # a float
d: !!float 123             # also a float via explicit data type prefixed by (!!)
e: !!str 123               # a string, disambiguated by explicit type
f: !!str Yes               # a string via explicit type
g: Yes                     # a boolean True (yaml1.1), string "Yes" (yaml1.2)
h: Yes we have No bananas  # a string, "Yes" and "No" disambiguated by context.

Ne ĉiu efektivigo de YAML havas ĉiun specifon-difinita datuman tipon. Ĉi tiuj konstruita-en tipoj uzas duoblan-ekkrio sigil prefiksa (

!!

). Precipe interesa ones ne montrita ĉi tie estas aroj, ordonita mapojn, timestamps kaj deksesuma. Ĉi tie-a ekzemplo de base64-kodita binaran datumon.

---
picture: !!binary |
  R0lGODdhDQAIAIAAAAAAANn
  Z2SwAAAAADQAIAAACF4SDGQ
  ar3xxbJ9p0qa7R0YxwzaFME
  1IAADs=

Multaj efektivigoj de YAML povas subteni uzanton-difinita datumajn tipojn por objekta seriiĝado. Lokaj datumaj tipoj ne estas universalaj datumaj tipoj sed estas difinita en la apliko uzanta la YAML parser biblioteko. Lokaj datumaj tipoj uzas ununuran ekkrian markan kodon ({{|!}}).

---
myObject: !myClass { name: Joe, age: 15 }

===Ekzempla=== Datumo-struktura hierarkio estas daŭrigita de skizo indentation.

---
receipt:     Oz-Ware Purchase Invoice
date:        2012-08-06
customer:
    first_name:   Dorothy
    family_name:  Gale

items:
    - part_no:   A4786
      descrip:   Water Bucket (Filled)
      price:     1.47
      quantity:  4

    - part_no:   E1628
      descrip:   High Heeled "Ruby" Slippers
      size:      8
      price:     133.7
      quantity:  1

bill-to:  &id001
    street: |
            123 Tornado Alley
            Suite 16
    city:   East Centerville
    state:  KS

ship-to:  id001

specialDelivery:  >
    Follow the Yellow Brick
    Road to the Emerald City.
    Pay no attention to the
    man behind the curtain.
...

Avizo ke ŝnuroj ne postulas ĉirkaŭbarejon en citaĵaj markoj. La specifa nombro de spacoj en la indentation estas negrava kiel longe kiel paralelaj elementoj havas la saman maldekstran pravigon kaj la hierarchically nestita elementojn estas indented cetere. Ĉi tiu ekzempla dokumento difinas associative aro kun 7 pintaj nivelaj ŝlosiloj: unu el la ŝlosiloj, "eroj", enhavas 2-elementa listo, ĉiu elemento de kiu estas ĝi mem associative aro kun malsamanta ŝlosilojn. interrilata datumo kaj pleonasma forigo estas montrita: la "ŝipo "-al" associative ara enhavo estas kopiita de la "kalkulo "-al" associative laenhavo de aro kiel indikita de la ankra kodo ({{|&}}) kaj referenca (

) etikedoj. Laŭvolaj malplenaj linioj povas esti aldonita por legebleco. Multoblaj dokumentoj povas ekzisti en ununura dosiera rivereto/ kaj estas apartigita de --- . Laŭvola kodo {{|...}} Povas esti uzita fine de dosiero (utila por signaling fino en alfluita komunikadojn sen fermanta la tubon).

Prezentas redakti

Indented delimiting redakti

Ĉar YAML unuavice fidas sur skizo indentation por strukturo, ĝi estas precipe hardita al delimiter kolizio. lamalsimpatieco de YAML al citaĵaj markoj kaj stegoj en scalar valoroj signifas unu povas embed XML, JSON aŭ paraj YAMLaj dokumentoj en YAMLa dokumento de simple indenting ĝi en bloko laŭvorta (uzanta |>

):

---
example: >
        HTML goes into YAML without modification
message: |

        <blockquote style="font: italic 1em serif">
        <p>"Three is always greater than two,
           even for large values of two"</p>
        <p>--Author Unknown</p>
        </blockquote>
date: 2007-06-01

YAML povas esti lokita en JSON de citanta kaj evitanta ĉiuj internaj citaĵaj markoj. YAML povas esti lokita en XML de evitanta sindetenan karakteran (Ŝablono:Kodon,

& , ' , " ) kaj transformanta whitespace aŭ de lokanta ĝin en [[CDATAa sekcio .

Ne-hierarkiaj datumaj modeloj redakti

Malkiel JSON, kiu nur povas reprezenti datumon en hierarkia modelo kun ĉiu infana nodo havanta ununuran gepatron, YAML ankaŭ proponas simplan interrilatan planon kiu permesas ripetojn de identa datumo esti referencita de du aŭ pli da punktoj en la arbo prefere ol eniris redundantly ĉe tiuj punktoj. Tio ĉi estas simila al la serva IDREF konstruita en XML.[22] La YAML parser tiam vastigas ĉi tiujn referencojn en la plene loĝita datumaj strukturoj ili implicas kiam legita je, do ajna programo estas uzanta la parser ne devas esti konscia de interrilata kodada modelo, malkiel XMLaj procesoroj, kiu ne vastigas referencojn. Ĉi tiu vastigo povas plibonigi legeblecon dum reduktanta datuma eniro eraroj en konfiguraciaj dosieroj aŭ pretiganta protokolojn kie multaj parametroj restas la saman en sinsekva serio de rekordoj dum nur kelkaj varii. Ekzemplo estanta ke "ŝipo-al" kaj "kalkulo-al" rekordoj en fakturo estas preskaŭ ĉiam la sama datumo.

Praktika konsidera redakti

YAML estas linio-oriented kaj kaj tiel ĝi estas ofte simpla transformi la unstructured produktado ekzisti programojn en YAMLa formato dum havanta ilin reteni multe de la rigardo de la originala dokumento. Ĉar estas neniuj fermaj etikedoj, stegoj aŭ citaĵaj markoj ekvilibrigi, ĝi estas ĝenerale facile produkti bone-formita YAML rekte de distribuita gravuraĵajn komunikaĵojn ene de unsophisticated programoj. Same, la whitespace delimiters faciligi rapidan-kaj-malpura filtranta de YAMLaj dosieroj uzanta la linion-oriented komandoj en grep, AWK, Perl, Ruby kaj Python.

En aparta, malkiel markup lingvoj, blokoj de sinsekvaj YAMLaj linioj emas esti bone-formita YAML dokumentas sin mem. Tio ĉi faras ĝin tre facila skribi parsers ke ne devas pretigi dokumenton en ties tuteco (ekz. ekvilibriganta komencan kaj fermanta etikedojn kaj naviganta citita kaj evitita karakterojn) antaŭ ol ili komencas eltiranta specifajn rekordojn ene de. Ĉi tiu nemoveblaĵo estas precipe rimedo kiam iterating en ununura, stateless transludo, super rekordoj en registri kies tuta datuma strukturo estas tro granda teni en memoro aŭ por kiu reconstituting la tuta strukturo eltiri unu eron estus prohibitively altekosta.

Counterintuitively, kvankam ties indented delimiting povus ŝajni kompliki profunde nestita hierarkiojn, YAML pritraktas indents kiel malgranda kiel ununura spaco kaj tio ĉi povas atingi pli bonan compression ol markup lingvoj. Cetere, ekstreme profunde indentation povas esti evitita tute de aŭ: 1) reverting al "enteksta stilo" (t.e. JSON-kiel formato) sen la indentation; aŭ 2) uzanta interrilatajn ankrojn elvolvi la hierarkion al plata formo ke la YAML parser volas transparently reconstitute en la plena datuma strukturo.[23]===Sekureca===

YAML estas pure datumo-reprezentada lingvo kaj tiel havas ne executable komandoj. Dum validumado kaj analizanta estas inherently ebla en ajna datuma lingvo, efektivigo estas tia fifama enfalilo ke lamanko de YAML de rilata komanda lingvo povas esti relativa sekureca utilo.

Tamen, YAML permesas lingvon-specifaj etikedoj por ke arbitraj lokaj objektoj povas esti kreita de parser ke subtenas tiujn etikedojn. Ajna YAML parser kiu permesas altnivelan objekton instantiation esti efektivigita turnirojn la potenciala por injekta atako. Perl parsers kiu permesas ŝarĝanta de objektoj de arbitraj klasoj kreas laŭdiran "benita" valorojn. Uzanta ĉi tiujn valorojn povas ekkaŭzi neatenditan konduton, ekz. se la klaso uzas troŝarĝita operaciantojn. Tio ĉi povas gvidi al ekzekuto de arbitra Perl kodo.[24]La situacio estas simila por Python aŭ Ruby parsers. Laŭ la PyYAML dokumentaro:[25]

Noto ke la kapableco konstrui arbitran Python objekto povas esti danĝera se vi ricevas YAMLan dokumenton de untrusted fonto kiel la Interreto. La funkcia kodo {{|yaml.Sekura_ŝarĝo}} limigas ĉi tiun kapablecon al simpla Python objektoj kiel integraloj aŭ listoj. [...] Pyyaml permesas vin konstrui Python objekto de ajna tipo. Eĉ okazoj de Python klasoj povas esti konstruita uzanta la {{kodon {{|!!Python/objekta}} etikedo.

===Datuma pretigo kaj reprezentado===

La YAMLa specifo identigas okaza dokumento kiel "Prezento" aŭ "karaktera rivereto".[26] La primaraj logikaj strukturoj en YAMLa okaza dokumento estas scalars, sinsekvoj kaj mapadoj.[27] La YAMLa specifo ankaŭ indikas kelkajn bazajn limojn kiu aplikas al ĉi tiuj primaraj logikaj strukturoj. Ekzemple, laŭ la specifo, mapanta ŝlosilojn ne havas ordon. En ĉiu kazo kie noda ordo estas grava, sinsekvo devas esti uzita.[28]Cetere, en difinanta conformance por YAMLaj procesoroj, la YAMLa specifo difinas du primarajn operaciojn: rubejo kaj ŝarĝo. Ĉiuj YAML-observemaj procesoroj devas provizi almenaŭ unu el ĉi tiuj operacioj kaj povas optionally provizi ambaŭ.[29] Fine, la YAMLa specifo difinas informa modelo aŭ "reprezentada grafeo", kiu devas esti kreita dum pretiganta por ambaŭ rubejo kaj ŝarĝo operacioj, kvankam ĉi tiu reprezentado devas ne esti farita haveblan al la uzanto tra API.[30]==Komparo kun alia seriiĝada formata Komparo==

kun JSON redakti

JSONa sintakso estas bazo de YAMLa versio 1.2, kiu estis promulgated kun la senhalta celo alporti YAML "en observo kun JSON kiel oficiala subgrupo".[2] Kvankam antaŭaj versioj de YAML ne estis strikte kongrua,[31] la malakordoj estis malofte videblaj kaj plejpartoj de JSONaj dokumentoj povas esti analizita de kelka YAML parsers kiel Syck.[32] Tio ĉi estas ĉar semantika strukturode JSON estas ekvivalenta al la laŭvola "enteksta-stilo" skribi YAML. Dum plilongigitaj hierarkioj povas esti skribita en enteksta-stilo kiel JSON, tio ĉi ne estas rekomenda YAMLa stilo esceptas kiam ĝin helpa klareco.

YAML havas multajn suplementajn ĉefaĵojn mankanta en JSON, inkluzivanta rimarkojn, extensible datumaj tipoj, interrilataj ankroj, ŝnuroj sen citaĵaj markoj kaj mapanta tipojn konservanta kernan ordon.

Komparo kun TOMLa redakti

TOML estis desegnita esti avanco al la [[INIa .Ini dosiera formato. minimuma uzode YAML de indikilaj karakteroj estas komparita favore al strikta postulode TOML de citaĵaj markoj kaj kvadrataj konzoloj. lauzo de YAML de grava indentation kaj nestado permesas por malpli verbose strukturoj, ĉefaĵo kiu TOML ne havas sur komparebla sintaksa nivelo, male fidanta sur punkta signaro en ilia kerna kaj tablaj nomoj transporti la saman semantikan strukturon[33].

Komparo kun XMLa redakti

YAML mankas la ideon de etikedaj ecoj kiu estas trovita en XML. Male YAML havas extensible tajpi deklarojn (inkluzivanta klasajn tipojn por objektoj).

YAML ĝi mem ne havas lalingvon de XML-difinita dokumenton schema descriptors kiu permesas, ekzemple, dokumento al mem-konfirmi. Tamen, estas pluraj externally difinita schema descriptor lingvoj por YAML (ekz. Doktrino, Kwalify kaj Rx) kiu plenumas ke rolo. Cetere, la semantikoj provizita de lalingvo de YAML-difinita tipajn deklarojn en la YAML dokumentas ĝin mem ofte malstreĉas la bezonon por konfirmilo en simpla, oftaj situacioj. Cetere, YAXML, kiu reprezentas YAMLan datumon strukturoj en XML, permesas XML schema importistoj kaj produktadaj mekanismoj ŝatas XSLT esti aplikita al YAML.

Komparo de datumo-seriiĝadaj formatoj provizas pli ampleksa komparo de YAML kun aliaj seriiĝadaj formatoj.

Softvaro (emitters kaj parsers) redakti

Por fiksaj datumaj strukturoj, YAMLaj dosieroj simple povas esti produktita uzanta gravuraĵo komandoj kiu skribas ambaŭ la datumon kaj la YAML specifa ornamado. Forĵeti nekonstantan aŭ kompleksa, hierarkia datumo, tamen, diligenta YAML emitter estas preferinda. Simile, simplaj YAMLaj dosieroj (ekz. kerna-valoraj paroj) estas vole analizita kun regulaj esprimoj. Por pli da kompleksa aŭ nekonstanta, datumaj strukturoj, formala YAML parser estas rekomendita.

YAML emitters kaj parsers ekzisti por multaj popularaj lingvoj. Plejparto de ili estas skribita en la indiĝena lingvo ĝi mem. Kelkaj estas lingvaj ligadoj de la C biblioteko libyaml; ili povas kuri pli rapidan. Tie uzita esti alia C biblioteko, vokita Syck, skribita kaj orfigita de kial la bonsorta rigida: ĝi estas unmaintained, estas ne aŭtoritata fonta pako kaj la retejo estis hijacked. Tial la nura recommendable C biblioteko estas libyaml. Ĝi estis originale evoluigita de Kirill Simonov. En 2018, evoluado estis rekomencita de la nova maintainers Ian Cordasco kaj Ingy döt Reto.[34]C++ programadistoj havas la elekton inter la C biblioteko libyaml kaj la C++ biblioteko libyaml-cpp. Ambaŭ havas tute sendependajn kodajn bazojn kaj tute malsama APIs. La biblioteko libyaml-cpp ankoraŭ havas gravan versian nombron de 0, indikanta ke la API povas ŝanĝi ĉe ajna momento, kiel okazita efektive post versio 0.3. Estas gramatiko-laŭcela efektivigo skribita en C#, kun celo sur etendaĵoj por la nestita elementojn.[35]Kelkaj efektivigoj de YAML, kiel laYAML de Perl.Pm, ŝarĝos tutan dosieran rivereton () kaj analizas ĝin en masse. Aliaj efektivigoj ŝatas PyYaml estas maldiligenta kaj iterate super la sekvanta dokumento nur al peto. Por tre grandaj dosieroj en kiu el ili planas pritrakti la dokumentojn sendepende, instantiating la tuta dosiero antaŭ pretigo povas esti nepagebla. Tiel en YAML.Pm, foje unu devas blokon dosiero en dokumentoj kaj analizi tiujn unuope. YAML faras ĉi tiun facilan, pro tio ke tio ĉi simple postulas fendanta sur la dokumenta fina signo, kiu estas difinita kiel tri periodoj ĉe la komenco de linio sekvita de whitespace (kaj ebla rimarko). Ĉi tiu signo estas malpermesita en enhavo.[36]==Kritika== YAML estis kritikita por ties grava whitespace, konfuzanta ĉefaĵojn, nesekuraj nerepagoj kaj ties kompleksa kaj ambigua specifo:[37][38][39]* Konfiguraciaj dosieroj povas efektivigi komandojn aŭ ŝarĝajn enhavojn sen la uzantoj konscianta ĝin.[40]

  • Stumpigita dosierojn estas ofte interpretita kiel valida YAML pro la manko de terminators.
  • La komplekseco de la normo gvidita al nekonstantaj efektivigoj kaj faranta la lingvon ne-portebla.[40]

Referencoj redakti

  1. 1,0 1,1 1,2 1,3 Yet Another Markup Language (YAML) 1.0 / Working Draft (10 Dec 2001).
  2. 2,0 2,1 2,2 YAML Ain't Markup Language (YAML) Version 1.2. Alirita 2019-05-29.
  3. Built-in Types — Python 3.9.6 documentation. Alirita 2021-08-19.
  4. Standard built-in objects - JavaScript | MDN (en-US). Alirita 2021-08-19.
  5. . Built-in types (C++) (en-us). Alirita 2021-08-19.
  6. The Official YAML Web Site.
  7. Setting up Vim for YAML editing.
  8. Yaml Mode. EmacsWiki (2015-06-12). Alirita 2016-12-05.
  9. aukaost Pretty YAML - Packages - Package Control. Packagecontrol.io. Alirita 2016-12-05.
  10. yaml. Marketplace.eclipse.org. Alirita 2016-12-05.
  11. Ruth Kusterer NetBeans IDE - Ruby and Ruby on Rails Development. Netbeans.org. Alirita 2016-12-05.
  12. YAML Ain't Markup Language (September 24, 2006). Arkivita el la originalo je 2006-09-24.
  13. . YAML Draft 0.1. Yahoo! Tech groups: sml-dev (May 11, 2001). Arkivita el la originalo je 2001-06-03. Alirita 2019-03-21.
  14. 14,0 14,1 YAML Ain't Markup Language: About. Alirita 2019-05-29.
  15. Yet Another Markup Language (YAML) 1.0. Alirita 2019-05-29.
  16. Yet Another Markup Language (YAML) 1.0. Alirita 2021-03-24.
  17. YAMLŜablono:Nbsp1.1 Reference Card. Alirita 2019-05-29.
  18. YAML Ain't Markup Language (YAML) Version 1.2. Alirita 2019-05-29.
  19. YAML Ain't Markup Language (YAML) Version 1.2. Alirita 2019-05-29.
  20. Cloud Based Management apps. Arkivita el la originalo je 2016-09-17. Alirita 2016-09-28.
  21. 21,0 21,1 YAML 1.2 specification of Structures. Alirita 2019-05-29.
  22. Extensible Markup Language (XML) 1.0 (Second Edition). Alirita 27 May 2015.
  23. Free Courses | Introduction to YAML - A hands -on course (angle). Alirita 2022-08-04.
  24. YAML (2022-08-04). Alirita 2022-08-04.
  25. PyYAML Documentation, Loading YAML. Alirita 2016-09-28.
  26. Ain't Markup Language (YAML) Version 1.1. Alirita 2019-05-29.
  27. Additional, optional-use, logical structures are enumerated in the YAML types repository. Language-Independent Types for YAML Version 1.1. Alirita 2019-05-29. The tagged types in the YAML types repository are optional and therefore not essential for conformant YAML processors. "The use of these tags is not mandatory."
  28. YAML Ain't Markup Language (YAML) Version 1.1. Alirita 2019-05-29.
  29. Ain't Markup Language (YAML) Version 1.1. Alirita 2019-05-29.
  30. YAML Ain't Markup Language (YAML) Version 1.1. Alirita 2019-05-29.
  31. The incompatibilities were as follows: JSON allows extended character sets like UTF-32 and had incompatible unicode character escape syntax relative to YAML; YAML required a space after separators like comma, equals, and colon while JSON does not. Some non-standard implementations of JSON extend the grammar to include Javascript's /*.../ comments. Handling such edge cases may require light pre-processing of the JSON before parsing as in-line YAML. See also [1].
  32. Parsing JSON with SYCK. Note that e.g. Symfony's YAML parser does not support line breaks inside [] or {} structures, which is a major incompatibility with JSON.
  33. Kio estas malĝuste kun TOML?
  34. yaml-core@lists.sourceforge.net, mail of June 27, 2018.
  35. YAML Grammar for Lexepars.
  36. YAML Ain't Markup Language (YAML) Version 1.2 # 9.1.2 Document Markers. Alirita 2019-05-29.
  37. . YAML: probably not so great after all (4 Sep 2016). Alirita 16 May 2019.
  38. That's a lot of YAML. Alirita 16 May 2019.
  39. YAML sucks. Alirita 16 May 2019.
  40. 40,0 40,1 * Editing large YAML files is difficult, as indentation errors can go unnoticed.<ref name="notgreat/">