Sto costruendo un wrapper per uno strumento di test del carico che prenderà i file di configurazione e di scenario come yaml e costruirà un file xml grande e ingombrante che verrà distrutto quando non sarà più necessario.
Un file yaml di esempio sarà simile a questo:
# basic.yml
config:
ip: 127.0.0.1
rate: 1
maximum: 10
iterations: 75
email: [email protected]
repeat: true
scenario:
- wait 5
- ping 7
- wait 5
L'xml contiene una serie di dati specifici per lo strumento sottostante in fase di completamento ma che non devono mai essere visti da un utente finale.
Ad esempio, l'intestazione è come
<send retrans="500">
<![CDATA[
<!-- 25 lines of specific configuration that will never change -->
]]>
</send>
<recv response="100" optional="true"/>
<recv response="180" optional="true"/>
<recv response="183" optional="true"/>
<recv response="503" optional="true"/>
<recv response="200" rrs="true" rtd="true"></recv>
dove letteralmente nessuno delle informazioni in questo segmento deve essere mai modificato. In effetti, nulla nella sezione config
dello yaml effettua l'xml. Ciò che influenza xml è lo scenario. Possiamo pensare allo scenario come un linguaggio specifico del dominio (dsl) in cui wait 5
significa che dobbiamo aggiungere
<pause milliseconds="5000"/>
dopo l'intestazione e ping 7
significa che dobbiamo aggiungere
<send retrans="500">
<![CDATA[
<!-- 12 lines of specific configuration that will never change -->
Signal=7 <!-- passed from yaml -->
<!-- 6 lines of specific configuration that will never change -->
]]>
</send>
seguito da un finale
<pause milliseconds="5000"/>
prima di altre 30-40 righe di xml specifici che non cambieranno mai.
Il mio approccio
Ho intenzione di utilizzare Ruby per eseguire questa implementazione, ma ciò è irrilevante per la mia domanda, che riguarda le migliori pratiche nella generazione di xml da un modello dsl. Sto pensando di tenere le mie "unità" xml in una sottodirectory come file di testo:
- header.txt
- wait.txt
- ping.txt
- footer.txt
Dove wait.txt
apparirebbe come
<pause milliseconds="#{time}"/>
e il mio parser estrae il file di testo, usa l'interpolazione della stringa per inserire il tempo estratto dallo yaml prima di aggiungere il messaggio al file xml che viene generato. Potremmo pensare a dsl per generare un file xml per questo file yaml come
header
wait 5
ping 7
wait 5
footer
Domanda
Quali sono le migliori pratiche nell'uso di yaml per generare xml? C'è un modo più "rubino" per memorizzare i componenti xml sottostanti? Mi mancano opportunità nell'uso del formato xml?