2013-02-22 55 views
1

我試圖用yaml來表示一個有站和線的火車網絡;一個最小工作示例可能是3個工作站,線性連接,因此A<->B<->C。我代表如下三個站:yaml中的圓形定義

--- 
stations: 
    - A 
    - B 
    - C 

現在我想存儲在網絡上不同的線路,並在那裏開始/結束。要做到這一點,我添加了一個線陣列和一些錨,如下:

--- 
stations: 
    - &S-A A 
    - &S-B B 
    - &S-C C 
lines: 
    - &L-A2C A to C: 
     from: *S-A 
     to: *S-C 
    - &L-C2A C to A: 
     from: *S-C 
     to: *S-A 

,這裏是我遇到的麻煩的一部分:我想存儲的下一站在每個車站的每一行。理想的情況是這樣的:

--- 
stations: 
    - &S-A A: 
     next: 
      - *L-A2C: *S-B 
    - &S-B B: 
     next: 
      - *L-A2C: *S-C 
      - *L-C2A: *S-A 
    - &S-C C: 
     next: 
      - *L-C2A: *S-B 

(在lines陣列保持不變)

但這種失敗 - 至少在Python YAML庫,說yaml.composer.ComposerError: found undefined alias 'L-A2C'。我知道這是爲什麼 - 這是因爲我還沒有定義這條線。但我不能首先定義線路,因爲它們取決於電臺,但現在電臺取決於線路。

有沒有更好的實現方法?

回答

1

Congradulations!你在大多數(如果不是全部的話)YAML實現中發現了一個問題。我最近也發現了這個限制,我正在研究如何解決(在Ruby世界中)。但這不會幫助你。你所要做的就是將「下一站」作爲一組單獨的數據點來存儲。

next-stops: 
    *S-A: 
    - *L-A2C: *S-B 
    *S-B: 
    - *L-A2C: *S-C 
    - *L-C2A: *S-A 
    *S-C: 
    - *L-C2A: *S-B 

這有幫助嗎?

+0

謝謝!我想我必須這樣做,儘管它並不完美。這是YAML庫或規格本身的缺點嗎? – jackweirdy 2013-02-23 23:32:05