YAML: traduzione di testo scorrevole da XML

3

Sto studiando YAML come sostituto di XML, ma sto riscontrando difficoltà quando si tratta di elementi contenenti testo scorrevole con elementi incorporati. Ad esempio, il seguente documento XML:

    <text>
    This is an example text, spanning multiple lines, and it has embedded elements
    like <a p="value">this</a> and <b>this</b>.  There is also a list:
         <quote>
            <text>The text of the quote, spanning multiple lines, and it has
            embedded elements like <c p="value">this</c> and <b>this</b></text>
            <author>The Author of this quote</author>
        </quote>
    Text continues here.
    </text>

Non so come convertire gli elementi incorporati in YAML. La mia comprensione è che il segmento del documento XML di cui sopra si traduce in qualcosa di simile (ad eccezione degli elementi incorporati):

    text: >
            This is an example text, spanning multiple lines, and it has embedded
            elements like <a p="value">this</a> and <b>this</b>.  There is also a
            list:
                 quote:
                    text: > 
                            The text of the quote, spanning multiple lines,
                            and it has embedded elements like <c p="value">this</c>
                            and <b>this</b>
                    author: The Author of this quote
            Text continues here.

Inoltre, il rientro non è necessario in alcuni punti?

    
posta Elena 19.07.2012 - 13:27
fonte

2 risposte

2

Se un parser XML / HTML / SGML, per alcuni linguaggi di programmazione X, analizza genericamente il tuo tipo di input (invece di generare oggetti astratti), normalmente i tag vengono tradotti nel costrutto di mapping per X, con i tag secondari e elementi di stringa come un costrutto di sequenze per X (come questi hanno bisogno di ordinamento), con gli attributi del tag qualche primo elemento speciale di quella sequenza (se gli attributi sono disponibili).

Tale gerarchia è una corrispondenza perfetta per YAML¹:

text:
- |-
  This is an example text, spanning multiple lines, and it has embedded elements
  like
- a:
  - .attribute:
      p: value
  - this
- and
- b: this
- '.  There is also a list:'
- quote:
  - text:
    - |-
      The text of the quote, spanning multiple lines, and it has
              embedded elements like
    - c:
      - .attribute:
          p: value
      - this
    - and
    - b: this
  - author: The Author of this quote
- Text continues here.

Il blocco letterale è stato usato qui per preservare le newline nei dati originali, ma potrebbe essere usato anche piegato.

Questo YAML può essere utilizzato per rigenerare la struttura originale XML / HTML / SGML ad eccezione di alcune informazioni di spazio bianco rimosse e compresse, che normalmente non influiscono ad es. rendering di HTML. Il precedente YAML non è la la rappresentazione di XML / HTML / SGML in YAML, solo uno dei possibili modi per farlo.

Per quanto riguarda la tua seconda domanda:

is indentation not needed in some places?

Come puoi vedere dall'output, il rientro non è sempre necessario, gli elementi della sequenza sotto la chiave text: non sono rientrati. Ma se hai finito, allora finisci sempre una raccolta (sequenza / mappatura).

¹ Questo è l'output di yaml from-html --no-body input.xml con input.xml contenente il tuo documento XML. yaml è un comando che fa parte del mio pacchetto python ruamel.yaml

    
risposta data 02.06.2015 - 12:25
fonte
2

Il sito web YAML descrive YAML nei seguenti termini:

YAML: YAML Ain't Markup Language

What It Is: YAML is a human friendly data serialization
  standard for all programming languages.

Probabilmente non vuoi YAML per questo. YAML è pensato per essere utilizzato per salvare i dati in file per il recupero futuro, fondamentalmente come una forma di serializzazione. Il principale vantaggio che ha su XML in questo senso è il fatto che gli manca il disordine delle parentesi angolari e dei tag finali dell'XML. È facile da leggere e modificare per gli umani. XML, d'altra parte, è già progettato per funzionare con una sintassi simile a HTML. Lo scopo principale di XML è come linguaggio di markup.

Puoi guardarlo in questo modo:

  • Utilizza YAML quando desideri salvare testo o oggetti in un file.
  • Utilizza XML quando desideri fornire markup per documenti
risposta data 19.07.2012 - 14:56
fonte

Leggi altre domande sui tag