Định dạng tập tin cấu hình con người đơn giản nhất có thể đọc được là gì? [đóng cửa]


13

Tập tin cấu hình hiện tại như sau:

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'

Điều này được đọc với python vào một từ điển lồng nhau:

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

Có cách nào tốt hơn để làm điều này? Ý tưởng là để có được loại hành vi XML và tránh XML càng lâu càng tốt. Người dùng cuối được cho là gần như hoàn toàn không biết chữ máy tính và về cơ bản sử dụng notepad và sao chép-dán. Do đó, loại "tiêu đề + biến" tiêu chuẩn python được coi là quá khó.

Người dùng giả chỉnh sửa tập tin cấu hình, lập trình viên có thể xử lý từ điển. Từ điển lồng nhau được chọn để phân tách dễ dàng (logger không cần hoặc thậm chí không thể có / chỉnh sửa các tham số mainwindow).


11
Đơn giản nhất tuyệt đối sẽ là xây dựng ứng dụng khách của bạn một ứng dụng nhỏ không có gì ngoài chỉnh sửa các tệp cấu hình này.
Patrick Hughes

11
Tệp cấu hình đơn giản nhất cho con người là: Do what I want.Mặc dù vậy, nó khó nhất đối với máy tính: P
Sjoerd

@PatrickHughes Tôi đoán là đã tồn tại một cái. Bạn có biết về một chương trình như vậy. Tôi không muốn mất thời gian chỉ để "in đẹp" những điều đơn giản. Vấn đề là thêm các chương trình nhỏ cần nhiều hơn. Ý tôi là mọi máy tính đều có vim, textedit hoặc notepad.
Juha

@sjoerd Đây là những gì tôi muốn biết. Có thuật toán nào giống ngôn ngữ của con người hơn các chương trình theo nghĩa này.
Juha

2
Người dùng có thể phá vỡ bất cứ điều gì. Nếu họ sẽ chỉnh sửa thủ công, hãy chuẩn bị để hỗ trợmainwindow.title =='test"
MSalters

Câu trả lời:


15

Bạn có thể sử dụng một cái gì đó như YAML . Đây là một liên kết đến một ví dụ:

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.

Bạn có thể tìm thấy các ràng buộc Python cho nó tại PyYAML . Nó thân thiện với người dùng hơn một chút so với JSON (đó là ví dụ thứ hai của bạn trông như thế nào).


10
YAML là dandy, nhưng chắc chắn không phải là đơn giản nhất.
9000

1
Tôi nghĩ đơn giản nhất trong bối cảnh câu hỏi của anh ấy: "lấy loại hành vi XML và tránh XML càng lâu càng tốt". Tôi không chắc chắn bất cứ điều gì đơn giản hơn, trong khi đáp ứng yêu cầu này.
jmq

hmm, vậy là codeblock đầu tiên của tôi nếu tôi thay đổi "." và "=" thành ":" và mất aphostropes? Có một chút dữ liệu dư thừa nhưng sau đó nó sẽ tùy thuộc vào người dùng mà anh ấy thích nhất.
Juha

3
Tôi khá chắc chắn rằng những người dùng không có kỹ thuật sẽ hiểu sai cách thụt lề - chứ đừng nói đến những thứ tối nghĩa hơn như >sau comments:, và trước &*sauid001
Izkata

6

Điều tốt nhất bạn có thể làm là cung cấp một bản mô phỏng giải pháp của bạn và có thể là một bản mô phỏng của một vài giải pháp khác và hỏi hai hoặc ba người dùng đại diện của hệ thống của bạn. Họ sẽ tốt hơn nhiều khi nói với bạn những gì họ thích hơn những người tự chọn trả lời câu hỏi trên trang web này.

Điều đó đang được nói, đối với người dùng "về cơ bản không biết chữ", tôi nghĩ định dạng bạn hiển thị trong câu hỏi của bạn có lẽ là định dạng văn bản thuần túy tốt nhất. Nếu họ thực sự không biết chữ, bạn có thể muốn xem xét một GUI đơn giản để họ không phải chỉnh sửa các tệp cấu hình.


3

Mất tất cả những gì bạn có thể mất. name.name.name=value, mỗi dòng trên một dòng riêng biệt, đơn giản như bạn có thể nhận được. Bạn không cần các trích dẫn để phân tích cú pháp, bạn biết khi nào truelà boolean và khi nào truelà một chuỗi, đừng làm cho "con người câm" nói với bạn điều đó. Đối với các chuỗi, nếu trường không có khoảng trống hàng đầu / dấu, hãy tự tước chúng.


3

Hãy tưởng tượng một người Trung Quốc không biết tiếng Anh đang cố đọc tệp cấu hình của bạn. Ngoài ra, hãy tưởng tượng tệp cấu hình bằng tiếng Ả Rập (và bạn không biết tiếng Ả Rập). Bây giờ hãy tự hỏi, điều này thực sự có thể đọc được của con người?

Ngay cả khi người đọc biết tiếng Anh, họ vẫn không biết liệu "logger.datarate = 100" có nghĩa là 100 ký tự mỗi giây hay 100 GiB mỗi giờ hay 100 con gà mỗi tấn.

Định dạng tệp dễ đọc nhất của con người, là một tệp nhị phân với hộp thoại / trình hướng dẫn / cấu hình dựa trên GUI phù hợp (với quốc tế hóa, hệ thống trợ giúp, v.v.).


2

Tôi với Patrick Hughes. Xây dựng một ứng dụng đơn giản để chỉnh sửa cấu hình. Bản thân tệp cấu hình có thể phức tạp hơn một chút và có thể chứa các thuộc tính để trình soạn thảo sử dụng (tên hiển thị, văn bản trợ giúp, loại giá trị, giá trị tối thiểu / tối đa, v.v.).


1
vấn đề ở đây là ứng dụng phải hỗ trợ osx, win và ubfox và có quyền truy cập vào hệ thống tập tin. Vì vậy, thay thế duy nhất của tôi là thực thi python tĩnh (và wx cho giao diện gốc). Hoặc có ngôn ngữ khác? Bạn có thể thực hiện java thực thi tĩnh?
Juha

Một ứng dụng QT sẽ là một giải pháp đơn giản và phù hợp trong trường hợp của bạn
Riga

2

Tôi nói những gì bạn có (tệp thuộc tính) đã là định dạng cấu hình dễ đọc nhất của con người. :)

Dưới đây là những lập luận của tôi:

  • Tệp thuộc tính chỉ là cặp khóa / giá trị. Dễ dàng đọc được bởi con người.
  • Cú pháp Terse, không giống như xml.
  • Dễ dàng lồng nhau, với '.', Như trong ví dụ của bạn.
  • Cấu trúc phẳng cho phép dễ dàng khác nhau trong một môi trường kiểm soát nguồn.

Điểm cuối cùng đó thực sự khá quan trọng. Cho rằng các dự án ngày nay được chia thành các nhánh, tệp cấu hình có thể gây ra vô số đau đớn khi bạn sáp nhập các nhánh. Định dạng tệp phẳng như tệp thuộc tính dễ hợp nhất hơn tệp cấu trúc cây.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.