2011-02-02 29 views
12

nói rằng tôi có file YAML sau:Override YAML khóa

- 
    key1: value 
# and so on... 
    key99: value 
    key100: 
     subkey1: value 
# and so on... 
     subkey100: value 
- 
    key1: value 
# and so on... 
    key99: value 
    key100: 
     subkey1: value 
# and so on... 
     subkey100: SOME DIFFERENT VALUE 

Cách tự nhiên để xử lý một lượng lớn dữ liệu giống hệt nhau sẽ là với neo, và trọng chỉ quan trọng mà thay đổi.

Câu hỏi đặt ra là ở đây, khóa con khác nhau. Có cách nào dễ dàng để chỉ tham chiếu rằng key100['subkey100'] đã thay đổi không? Hay tôi phải sử dụng một loạt các neo ở mỗi cấp?

Tức là, là có một cách viết tắt cho:

- &anchor 
    key1: value 
# and so on... 
    key99: value 
    key100: &subanchor 
     subkey1: value 
# and so on... 
     subkey100: value 
- 
    <<: *anchor 
    key100: 
     <<: *subanchor 
     subkey100: SOME DIFFERENT VALUE 
+0

Đây phải là một vấn đề dễ dàng! Cmon People! – Thomas

Trả lời

7

Nếu tôi đã hiểu câu hỏi một cách chính xác, tôi không nghĩ rằng spec hỗ trợ các yếu tố trọng của các nút neo.

On đọc spec (phiên bản 1.2, nhưng 1.1 nói giống nhau), phần 7.1 Alias Nodes bang (tôi nhấn mạnh):

lần xuất hiện tiếp theo của một đăng trước nút được trình bày như nút bí danh. Sự xuất hiện đầu tiên của nút phải được đánh dấu bằng một neo để cho phép các lần xuất hiện tiếp theo được trình bày dưới dạng các nút bí danh.

Nút bí danh được ký hiệu bằng chỉ báo “*”. Bí danh đề cập đến nút trước gần nhất có cùng một neo. Nó là một lỗi cho một nút bí danh để sử dụng một neo mà trước đó không xảy ra trong tài liệu. Nó không phải là một lỗi để chỉ định một neo không được sử dụng bởi bất kỳ nút bí danh nào.

Lưu ý rằng nút bí danh không được chỉ định bất kỳ thuộc tính hoặc nội dung nào vì chúng đã được chỉ định ở lần xuất hiện đầu tiên của nút.

Hai điểm ở đây:

  1. "nút Trước đây đăng" - từ ngữ này cho thấy rằng các bí danh là có nghĩa là để đại diện cho một lần xuất hiện của nút gốc, không chỉ là các dữ liệu trong nút gốc. Nói cách khác, nó đại diện cho cùng một đối tượng, không phải là một bản sao.

  2. Nếu bí danh không thể có bất kỳ nội dung nào (phần in đậm thứ hai), thì bạn không thể chỉ định ghi đè theo kiểu được đề xuất trong câu hỏi.

Vì vậy, việc diễn giải thông số của tôi là bạn không thể thực hiện điều này theo thông số.

Tuy nhiên - Nếu bạn dán ví dụ (khối thứ hai) từ gốc vào this online tool (bạn có thể bỏ chọn 'canonical'), công cụ đó diễn giải như dự định trong câu hỏi, sao chép nội dung gốc nhưng ghi đè subkey100. Tương tự cho số này YAML Lint Tool, cũng như this online parser.

Vì vậy, dường như nó hoạt động trong thực tế, nhưng tôi không thể tìm thấy hỗ trợ cho nó trong thông số kỹ thuật.