Τι είναι ένα αρχείο YAML;
Το αρχείο YAML αποτελείται από μια γλώσσα YAML (YAML Ain’t Markup Language) η οποία είναι μια γλώσσα σειριοποίησης δεδομένων που βασίζεται σε Unicode. χρησιμοποιείται για αρχεία διαμόρφωσης, ανταλλαγή μηνυμάτων στο Διαδίκτυο, διατήρηση αντικειμένων κ.λπ. Το YAML χρησιμοποιεί την επέκταση .yaml για τα αρχεία του. Η σύνταξή του είναι ανεξάρτητη από μια συγκεκριμένη γλώσσα προγραμματισμού. Βασικά, το YAML έχει σχεδιαστεί για ανθρώπινη αλληλεπίδραση και για να λειτουργεί καλά με σύγχρονες γλώσσες προγραμματισμού. Η υποστήριξη για σειριοποίηση αυθαίρετων εγγενών δομών δεδομένων αύξησε την αναγνωσιμότητα των αρχείων YAML, αλλά έχει κάνει τη διαδικασία ανάλυσης και δημιουργίας αρχείων λίγο περίπλοκη.
Σύντομη Ιστορία
Το YAML προτάθηκε για πρώτη φορά το 2001 και αναπτύχθηκε από τους Clark Evans, Ingy döt Net και Oren Ben-Kiki. Η YAML αρχικά ειπώθηκε ότι σημαίνει “Ακόμα μια άλλη γλώσσα σήμανσης” για να υποδείξει τον σκοπό της ως γλώσσα σήμανσης. Αργότερα επαναχρησιμοποιήθηκε ως “YAML Aint Markup Language” για να υποδείξει τον σκοπό της ως προσανατολισμένη στα δεδομένα.
Μορφή αρχείου YAML
Το αρχείο YAML αποτελείται από τους ακόλουθους τύπους δεδομένων
- Scalars: Οι βαθμωτές είναι τιμές όπως συμβολοσειρές, ακέραιοι αριθμοί, δυαδικοί αριθμοί κ.λπ.
- Ακολουθίες: Οι ακολουθίες είναι λίστες με κάθε στοιχείο που ξεκινά με παύλα (-). Οι λίστες μπορούν επίσης να είναι ένθετες.
- Χαρτογράφηση: Η αντιστοίχιση δίνει τη δυνατότητα να παραθέσουμε κλειδιά με τιμές.
Σύνταξη
- Whitespace: Η εσοχή κενού διαστήματος χρησιμοποιείται για να υποδείξει τη φωλιασμένη και τη συνολική δομή.
``γιαμλ όνομα: John Smith Επικοινωνία: οικίας: 1012355532 γραφείου: 5002586256 διεύθυνση: οδός: | 123 Tornado Alley Σουίτα 16 πόλη: East Centerville κατάσταση: ΚΣ
- **Σχόλια**: Τα σχόλια γράφονται αρχίζοντας με το σύμβολο "#".
``γιαμλ
# Αυτό είναι ένα σχόλιο YAML
- Λίστες: Η παύλα (-) χρησιμοποιείται για να υποδείξει τα μέλη της λίστας με κάθε μέλος σε ξεχωριστή γραμμή. Τα μέλη της λίστας μπορούν επίσης να περικλείονται σε αγκύλες ([…]) με τα μέλη να χωρίζονται με κόμματα (,).
``γιαμλ
- A
- B
- C
``γιαμλ
[Α, Β, Γ]
- Συσχετικός πίνακας: Ένας συσχετικός πίνακας περιβάλλεται από σγουρές αγκύλες ({…}). Τα κλειδιά και οι τιμές διαχωρίζονται με άνω και κάτω τελεία(:) και κάθε ζεύγος χωρίζεται με κόμμα (,).
``γιαμλ {name: John Smith, age: 20}
- **Συμβολοσειρές**: Η συμβολοσειρά μπορεί να γραφτεί με ή χωρίς διπλά εισαγωγικά (") ή μονά εισαγωγικά (').
``γιαμλ
Δείγμα συμβολοσειράς
"Δείγμα συμβολοσειράς"
'Sample String'
- Περιεχόμενο Scalar Block: Το βαθμωτό περιεχόμενο μπορεί να γραφτεί με συμβολισμό μπλοκ χρησιμοποιώντας τα ακόλουθα:
- |: All live breaks are significant.
- >: Each line break is folded to space. It removes the leading whitespace for each line.
``γιαμλ δεδομένα: | YAML (Το YAML δεν είναι γλώσσα σήμανσης) είναι μια γλώσσα σειριοποίησης δεδομένων
``γιαμλ
δεδομένα: ?
YAML (YAML δεν είναι γλώσσα σήμανσης)
είναι μια γλώσσα σειριοποίησης δεδομένων
- Πολλαπλά έγγραφα: Πολλά έγγραφα χωρίζονται με τρεις παύλες (—) σε μια ενιαία ροή. Οι παύλες υποδηλώνουν την έναρξη του εγγράφου. Οι παύλες χρησιμοποιούνται επίσης για τον διαχωρισμό των οδηγιών από το περιεχόμενο εγγράφων. Το τέλος του εγγράφου υποδεικνύεται με τρεις τελείες (…).
``γιαμλ
Έγγραφο 1
Έγγραφο 2 …
- **Τύπος**: Για τον καθορισμό του τύπου της τιμής, χρησιμοποιούνται διπλά θαυμαστικά (!!).
``γιαμλ
α: !!float 123
β: !!στρ 123
- Ετικέτα: Για να αντιστοιχίσετε μια ετικέτα σε μια σημείωση, χρησιμοποιείται ένα συμπλεκτικό σύμφωνο (&) και για αναφορά σε αυτόν τον κόμβο, χρησιμοποιείται ένας αστερίσκος (*).
``γιαμλ όνομα: John Smith χρέωση προς: &id01 οδός: | 123 Tornado Alley Σουίτα 16 πόλη: East Centerville κατάσταση: ΚΣ
αποστολή σε: *id01
- **Οδηγίες**: Τα έγγραφα YAML μπορούν να προηγούνται από οδηγίες σε ροή. Οι οδηγίες ξεκινούν με ένα σύμβολο ποσοστού (%) ακολουθούμενο από το όνομα και στη συνέχεια τις παραμέτρους που διαχωρίζονται με κενά.
``γιαμλ
%YAML 1.2
---
Περιεχόμενο εγγράφου
Παράδειγμα αρχείου YAML
Εδώ μπορείτε να δείτε ένα παράδειγμα αρχείου yaml docker παρακάτω:
topology:
database_node_name: docker_controller
docker_controller_node_name: docker_controller
self_service_portal_node_name: docker_controller
kvm_compute_node_names: kvm_compute1
docker_compute_node_names: docker_compute1
YAML εναντίον JSON
Βασικά, τόσο το JSON όσο και το YAML έχουν αναπτυχθεί για να παρέχουν μια μορφή ανταλλαγής δεδομένων αναγνώσιμη από τον άνθρωπο. Το YAML υλοποιείται ως υπερσύνολο μορφής JSON. Σημαίνει ότι μπορούμε να αναλύσουμε το JSON χρησιμοποιώντας έναν αναλυτή YAML. Αν και η πρακτική εφαρμογή αυτής της θεωρίας είναι ελάχιστα δύσκολη. Επομένως, μερικές βασικές διαφορές μεταξύ YAML και JSON δίνονται παρακάτω:
YAML | JSON |
---|---|
Πολύπλοκη και χρονοβόρα διαδικασία ανάλυσης σειριακών δεδομένων | Γρήγορη και εύκολη ανάλυση σειριακών δεδομένων JSON με τον απλούστερο σχεδιασμό του |
Λιγότερη κοινοτική υποστήριξη | Μεγαλύτερη υποστήριξη και δημοτικότητα της κοινότητας |
Υποστηρίζει σχόλια | Δεν υποστηρίζει σχόλια |
Δυνατότητα χρήσης αναφοράς άλλων αντικειμένων δεδομένων | Αδύνατη η σειριοποίηση σύνθετων δομών με αναφορές αντικειμένων |
Η ιεραρχία υποδηλώνεται με τη χρήση χαρακτήρων διπλού διαστήματος. Οι χαρακτήρες καρτέλας δεν επιτρέπονται | Τα αντικείμενα και οι πίνακες συμβολίζονται σε αγκύλες και αγκύλες. |
Τα εισαγωγικά συμβολοσειρών είναι προαιρετικά, αλλά υποστηρίζει μονά και διπλά εισαγωγικά. | Οι συμβολοσειρές πρέπει να είναι σε διπλά εισαγωγικά. |
Ο ριζικός κόμβος μπορεί να είναι οποιοσδήποτε από τους έγκυρους τύπους δεδομένων | Ο ριζικός κόμβος πρέπει να είναι είτε πίνακας είτε αντικείμενο. |