Apa format file konfigurasi manusia yang paling mudah dibaca? [Tutup]

13

File konfigurasi saat ini adalah sebagai berikut:

mainwindow.title = 'test'
mainwindow.position.x = 100
mainwindow.position.y = 200

mainwindow.button.label = 'apply'
mainwindow.button.size.x = 100
mainwindow.button.size.y = 30

logger.datarate = 100
logger.enable = True
logger.filename = './test.log'

Ini dibaca dengan python ke kamus bersarang:

{
  'mainwindow':{
    'button':{
      'label': {'value':'apply'},
       ...
  },
  'logger':{
     datarate: {'value': 100},
     enable: {'value': True},
     filename: {'value': './test.log'}
  }, 
  ...    
}

Apakah ada cara yang lebih baik untuk melakukan ini? Idenya adalah untuk mendapatkan tipe perilaku XML dan menghindari XML selama mungkin. Pengguna akhir diasumsikan hampir sepenuhnya komputer buta huruf dan pada dasarnya menggunakan notepad dan copy-paste. Jadi tipe standar python "header + variable" dianggap terlalu sulit.

Pengguna dummy mengedit file konfigurasi, pemrogram yang mampu menangani kamus. Kamus bersarang dipilih untuk memudahkan pemisahan (logger tidak perlu atau bahkan tidak dapat memiliki / mengedit parameter jendela utama).

Juha
sumber
11
Yang paling sederhana adalah membuat aplikasi kecil untuk klien Anda yang tidak melakukan apa pun selain mengedit file konfigurasi ini.
Patrick Hughes
11
File konfigurasi paling sederhana untuk manusia adalah: Do what I want.Ini yang paling sulit untuk komputer, meskipun: P
Sjoerd
@ Patrickrick Saya kira sudah ada satu. Apakah Anda mengetahui program semacam itu. Saya tidak ingin meluangkan waktu hanya untuk "mencetak" hal-hal sederhana. Masalahnya adalah bahwa menambahkan jeda program kecil membutuhkan lebih banyak. Maksud saya setiap komputer memiliki vim, textedit atau notepad.
Juha
@sjoerd Inilah yang ingin saya ketahui. Apakah ada algoritma yang lebih pada bahasa manusia daripada program dalam pengertian ini.
Juha
2
Pengguna dapat merusak apa pun. Jika mereka akan mengeditnya secara manual, bersiaplah untuk mendukungmainwindow.title =='test"
MSalters

Jawaban:

15

Anda bisa menggunakan sesuatu seperti YAML . Berikut ini tautan ke sebuah contoh:

http://www.yaml.org/start.html

--- !clarkevans.com/^invoice
invoice: 34843
date   : 2001-01-23
bill-to: &id001
    given  : Chris
    family : Dumars
    address:
        lines: |
            458 Walkman Dr.
            Suite #292
        city    : Royal Oak
        state   : MI
        postal  : 48046
ship-to: *id001
product:
    - sku         : BL394D
      quantity    : 4
      description : Basketball
      price       : 450.00
    - sku         : BL4438H
      quantity    : 1
      description : Super Hoop
      price       : 2392.00
tax  : 251.42
total: 4443.52
comments: >
    Late afternoon is best.
    Backup contact is Nancy
    Billsmer @ 338-4338.

Anda dapat menemukan binding Python untuk itu di PyYAML . Ini sedikit lebih ramah pengguna daripada JSON (seperti apa contoh kedua Anda).

jmq
sumber
10
YAML keren, tapi jelas bukan yang paling sederhana.
9000
1
Saya pikir paling sederhana dalam konteks pertanyaannya: "dapatkan tipe perilaku XML dan hindari XML selama mungkin". Saya tidak yakin akan sesuatu yang lebih sederhana, sambil memenuhi persyaratan ini.
jmq
hmm, begitu juga kunci kode pertama saya YAML jika saya mengubah "." dan "=" ke ":" dan kehilangan aphostropes? Ada sedikit data yang berlebihan tetapi kemudian terserah pengguna yang notasi yang paling disukainya.
Juha
3
Saya cukup yakin pengguna non-teknis akan mendapatkan lekukan yang salah - apalagi hal-hal yang lebih tidak jelas seperti >setelah comments:, dan &dan *di depanid001
Izkata
6

Hal terbaik yang dapat Anda lakukan adalah memberikan mockup solusi Anda, dan mungkin mockup beberapa solusi lain, dan bertanya kepada dua atau tiga pengguna representatif dari sistem Anda. Mereka akan jauh lebih baik dalam memberi tahu Anda apa yang mereka sukai daripada orang yang dipilih sendiri yang menjawab pertanyaan di situs ini.

Yang sedang berkata, untuk pengguna "pada dasarnya komputer buta huruf" saya pikir format yang Anda tunjukkan dalam pertanyaan Anda mungkin adalah format teks biasa terbaik. Jika mereka benar-benar buta komputer, Anda mungkin ingin mempertimbangkan GUI sederhana sehingga mereka tidak perlu mengedit file konfigurasi secara manual.

Bryan Oakley
sumber
3

Kalah segala yang Anda bisa kehilangan. name.name.name=value, masing-masing pada baris yang terpisah, adalah sesederhana mungkin. Anda tidak perlu kutipan untuk parsing, Anda tahu kapan trueboolean dan kapan truestring, jangan membuat "manusia bodoh" memberi tahu Anda. Untuk string, jika bidang tidak boleh memiliki lead / trailing blank, lepaskan sendiri.

Ross Patterson
sumber
3

Bayangkan orang Cina yang tidak tahu bahasa Inggris yang mencoba membaca file konfigurasi Anda. Atau, bayangkan file konfigurasi dalam bahasa Arab (dan Anda tidak tahu bahasa Arab). Sekarang tanyakan pada diri Anda, apakah ini benar-benar dapat dibaca manusia?

Bahkan jika pembaca tahu bahasa Inggris, mereka masih tidak tahu apakah "logger.datarate = 100" berarti 100 karakter per detik, atau 100 GiB per jam, atau 100 ayam per metrik ton.

Format file yang paling dapat dibaca manusia, adalah file biner dengan kotak dialog / penyihir / konfigurator berbasis GUI yang layak (dengan internasionalisasi, sistem bantuan, dll).

Brendan
sumber
2

Saya dengan Patrick Hughes. Buat aplikasi sederhana untuk mengedit konfigurasi. File config itu sendiri mungkin sedikit lebih kompleks dan mungkin berisi atribut untuk editor untuk digunakan (nama tampilan, teks bantuan, tipe nilai, nilai min / maks, dll).

Misko
sumber
1
masalahnya di sini adalah aplikasi harus mendukung osx, win dan ubuntu dan memiliki akses ke sistem file. Jadi satu-satunya alternatif saya adalah eksekusi python statis (dan wx untuk tampilan asli). Atau ada bahasa lain? Bisakah Anda membuat executable java statis?
Juha
Aplikasi QT akan menjadi solusi yang sederhana dan sesuai untuk kasus Anda
Riga
2

Saya katakan apa yang Anda miliki (file properti) sudah merupakan format konfigurasi terbaik yang dapat dibaca manusia. :)

Inilah argumen saya:

  • File properti hanyalah pasangan kunci / nilai. Mudah dibaca oleh manusia.
  • Sintaks terse, tidak seperti xml.
  • Mudah-sarang, dengan '.', Seperti pada contoh Anda.
  • Struktur datar memungkinkan pembedaan yang mudah dalam lingkungan yang dikendalikan sumber.

Poin terakhir itu sebenarnya cukup penting. Mengingat bahwa proyek-proyek saat ini semuanya dibagi menjadi cabang-cabang, file konfigurasi dapat menyebabkan banyak rasa sakit ketika Anda menggabungkan cabang. Format file flat seperti file properti lebih mudah digabungkan daripada file struktur pohon.

ming_codes
sumber