Zoeken…


Een tabel "Array of Dictionaries" maken met YAML-ankers als rij-ID's

    ---
    person_table:
      - &person001
        fname:  homer
        lname:  simpson
        role:   dad
        age:    33

      - &person002
        fname:  marge
        lname:  simpson
        role:   mom
        age:    34

      - &person003
        fname:  peter
        lname:  griffin
        role:   dad
        age:    34

Probleem

  • ontwikkelaar wil een tabelstructuur in YAML weergeven, waarbij elke rij wordt aangeduid door een compacte rij-ID

Oplossing

  • gebruik YAML-ankers door een anker-ID toe te wijzen aan elke rij in de tabel
  • in YAML worden herbruikbare 'transclusie-ID's' ankers en aliassen genoemd
  • in YAML bestaan herbruikbare 'transclusie-ID's' uit alfanumerieke tokens voorafgegaan door een ampersand of asterisk

motivering

  • YAML-ankers en aliassen zorgen voor verhoogde gegevensnormalisatie
  • YAML-ankers en aliassen dwingen DRY (herhaal jezelf niet)
  • in dit voorbeeld kan een tabelstructuur worden ontworpen en bewaard die nauw samenvalt met een database

valkuilen

  • YAML-ankers moeten worden aangegeven voordat naar hen kan worden verwezen door aliassen
  • YAML-ankers moeten uniek zijn in het document
  • het niet specificeren van unieke ankers zal een fout veroorzaken op yaml.load()
  • niet alle YAML-parsers ondersteunen betrouwbaar ankers en aliassen

Zie ook

Stackoverflow YAML

YAML-aliassen gebruiken om naar rijen van een YAML-tabel te verwijzen

    ---
    person_table:
      - &person001
        fname:  homer
        lname:  simpson
        role:   dad
        age:    33

      - &person002
        fname:  marge
        lname:  simpson
        role:   mom
        age:    34

      - &person003
        fname:  peter
        lname:  griffin
        role:   dad
        age:    34
        
    motto_table:
      - &motto001
        person:   *person001
        motto: >
          D'oh!! YAML is too complicated!

      - &motto002
        person:   *person002
        motto: >
          Bart! Listen to your father!

      - &motto003
        person:   *person003
        motto: >
          Hey! YAML is freakin' sweet!

Probleem

  • ontwikkelaar wil rijen-met-ankers uit de ene tabel kruisverwijzen en daaraan koppelen met rijen-als-aliassen in een andere tabel

Oplossing

  • gebruik YAML-aliassen, die vooraf gedefinieerde ankers uit een andere tabel doorverwijzen
  • in YAML worden herbruikbare 'transclusie-ID's' ankers en aliassen genoemd
  • in YAML bestaan herbruikbare 'transclusie-ID's' uit alfanumerieke tokens voorafgegaan door een ampersand of asterisk

motivering

  • YAML-ankers en aliassen zorgen voor verhoogde gegevensnormalisatie
  • YAML-ankers en aliassen dwingen DRY (herhaal jezelf niet)
  • in dit voorbeeld kan een tabelstructuur worden ontworpen en bewaard die nauw samenvalt met een database
  • in dit voorbeeld kunnen gegevensinvoer en bestandsgroottes worden verkleind

valkuilen

  • in dit specifieke voorbeeld yaml.load() geneste woordenboeken
    • dit wordt het "probleem met geneste woordenboeken" genoemd
    • onder het persoon naam-waarde paar zal de waarde voor persoon een subwoordenboek zijn
    • dit kan ongewenst zijn, omdat het de uniformiteit van de tafelstructuur breekt
  • het niet correct opgeven van aliassen zal resulteren in ontbrekende gegevens
    • (typefouten zorgen voor verbroken kruisverwijzingen)
  • YAML ondersteunt transclusie van bestanden niet door verwijzing, dus alle aliassen en ankers moeten in hetzelfde yaml-bestand voorkomen
  • niet alle YAML-parsers ondersteunen betrouwbaar ankers en aliassen

Zie ook

Stackoverflow YAML

YAML samenvoegtoetsen gebruiken om rijen van een andere YAML-tabel te verwijzen

    ---
    person_table:
      - &person001
        fname:  homer
        lname:  simpson
        role:   dad
        age:    33

      - &person002
        fname:  marge
        lname:  simpson
        role:   mom
        age:    34

      - &person003
        fname:  peter
        lname:  griffin
        role:   dad
        age:    34
        
    motto_table:
      - &motto001
        <<: *person001
        motto: >
          D'oh!! YAML is too complicated!

      - &motto002
        <<: *person002
        motto: >
          Bart! Listen to your father!

      - &motto003
        <<: *person003
        motto: >
          Hey! YAML is freakin' sweet!

Probleem

  • ontwikkelaar wil rijen-met-ankers uit de ene tabel kruisverwijzen en daaraan koppelen met rijen-als-aliassen in een andere tabel
  • ontwikkelaar wil voorkomen dat het probleem met "geneste woordenboeken" ontstaat

Oplossing

  • gebruik YAML-aliassen, met YAML-samenvoegtoetsen
  • in YAML worden herbruikbare 'transclusie-ID's' ankers en aliassen genoemd
  • in YAML bestaan herbruikbare 'transclusie-ID's' uit alfanumerieke tokens voorafgegaan door een ampersand of asterisk

motivering

  • YAML-ankers en aliassen zorgen voor verhoogde gegevensnormalisatie
  • YAML-ankers en aliassen dwingen DRY (herhaal jezelf niet)
  • in dit voorbeeld kan een tabelstructuur worden ontworpen en bewaard die nauw samenvalt met een database
  • in dit voorbeeld kunnen gegevensinvoer en bestandsgroottes worden verkleind

valkuilen

  • in dit specifieke voorbeeld yaml.load() geneste woordenboeken
    • onder het persoon naam-waarde paar zal de waarde voor persoon een subwoordenboek zijn
    • dit kan ongewenst zijn, omdat het de uniformiteit van de tafelstructuur breekt
  • het niet correct opgeven van aliassen zal resulteren in ontbrekende gegevens
    • (typefouten zorgen voor verbroken kruisverwijzingen)
  • YAML ondersteunt transclusie van bestanden niet door verwijzing, dus alle aliassen en ankers moeten in hetzelfde yaml-bestand voorkomen
  • niet alle YAML-parsers ondersteunen betrouwbaar ankers en aliassen

Zie ook



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow