From: trans. (T. Onoma) <tra...@ru...> - 2005-01-12 06:24:07
|
On Saturday 08 January 2005 08:45 pm, Rich Morin wrote: | At 12:51 PM -0500 1/8/05, trans. (T. Onoma) wrote: | >I wonder if YAML embedding might deserve some consideration. ... | | I doubt that my own use is what you have in mind, but here it is, | for the record. I'm using embedded YAML as a machine-readable | way to document and control the data flow of a substantial suite | of scripts, control files, etc. Yes, it is quite different. Nonetheless it is interesting to see others work in this area. | Each hand-edited file contains several lines of embedded YAML. A | reference file (eg, foo.yml) would have lines specifying its use. | A script would have additional lines, specifying input and output | files, etc. | | A harvesting script traverses directories where hand-edited files | are to be found. For each file, it: | | * outputs identifying header comments | * extracts all lines starting with the string "#DDF " | * removes the identifying string from each line | * performs some specialized macro processing | * outputs the resulting YAML code, comments, etc. You use #DDF to embed the YAML. I wonder if start and end marks would not be enough: --- !DDF - path: 'bin/con_y2d' desc: 'create diagrams for Constituent relationships' label: 'con_y2d' type: 'Perl script' inp_g: | a_etc/{con,pkg_use,tag_sum,use_tree}.yml e_etc/{def_{con,int},package}.yml out_g: | a_cir/*_*_*.{dot,inc,shtml} a_con/*_*.{dot,shtml} a_pnp/Pack_*_con.inc out_m: 'a_etc/exit_con_y2d' ... Though I think a real end-of-document marker is needed (instead of the end-of-stream '...'). | The result is a single YAML file, whose content describes the use | of both hand-edited and machine-generated files. Other scripts | use this information to generate dot(1), HTML, and make(1) files. | In the process, they report on missing or anomalous configuration | data. The result of all this is | | * a documentary web page with image-mapped data flow diagrams | for each part of the production system | | * a run of the production system, using the generated make(1) | file | | Although Jon Bentley might not approve, this is really one of his | "little languages". YAML serves as the fundamental syntax, so I | don't have to worry about real parsing issues, but the result is | a declarative data-flow language, of sorts. | | Some of the macro processing is quite trivial, though very useful. | Brace expansion, for example, is stolen from the C-shell: | | label: '{A,B}_{1,2,3}' | | turns into | | label: 'A_1 A_2 A_3 B_1 B_2 B_3' | | Some of the other expansions are rather more complex and tied to | the exact way that the follow-on scripts work. In all cases, the | macros help me to type less and (it says here :) reduce mistakes. | | For more information, see | | "Introduction to the #DDF Entry Format" | | http://www.slac.stanford.edu/exp/glast/flight/web/e_tut/DDF_format.shtml Cool. Thanks for sharing. -T. P.S. Does the YAML spec speak to YAML in YAML? I don't recall. |