Hi!
I have to say, the more I look at YAML, the more I wonder what the
designers were thinking. For example, in this section of the spec,
http://yaml.org/spec/current.html#id2532720
multi-line quoted strings are only allowed if the 'key' is also quoted
(the strange looking JSON approach);
if the key is not quoted (i.e.
'simple') then the value can't be quoted either. That's just nonsense!
Are you sure that is what it says?
"Double quoted scalars are restricted to a single line when contained
inside a simple key."
Is it not rather that you may not use a multiline double quoted string
as a KEY (at all). It does NOT forbid you to use multiline double
quoted strings in the value, no matter if or how you quote your keys.
I have certainly seen double quoted values for unquoted keys coming
from serializers claiming to be specification conformant.
Are any of your keys so long and complicated that they would need
multiline quoted strings?
I am glad I am only implementing a serialiser, not a parser...
In many less exotic languages they are already implemented 
Then you configure them and then throw your object trees at them.
An example of very unfinished work in progress, using poorly readable
ordering and based on the openEHR java-ref-impl (and probably exposing
too many fields) is attached below.
Best regards,
Erik Sundvall
erik.sundvall@liu.se http://www.imt.liu.se/~erisu/ Tel: +46-13-286733
!<http://www.openehr.org/releases/1.0.2/class/openehr.am.archetype.ARCHETYPE>
adl_version: '1.4'
archetype_id: openEHR-DEMOGRAPHIC-PERSON.person.v1
concept: at0000
original_language: ISO_639-1::pt-br
translations:
en:
language: ISO_639-1::en
author: {email: sergio@lampada.uerj.br, organisation: Universidade
do Estado do Rio de Janeiro - UERJ, name: Sergio Miranda Freire}
description:
original_author: {email: sergio@lampada.uerj.br, organisation:
Universidade do Estado do Rio de Janeiro - UERJ, name: Sergio Miranda
Freire & Rigoleta Dutra Mediano Dias,
date: 22/05/2009}
other_contributors: ['Sebastian Garde, Ocean Informatics, Germany
(Editor)', 'Omer Hotomaroglu, Turkey (Editor)', 'Heather
Leslie, Ocean Informatics, Australia (Editor)']
lifecycle_state: Authordraft
details:
- language: ISO_639-1::en
purpose: Representation of a person's demographic data.
keywords: [demographic service, person's data]
use: Used in demographic service to collect a person's data.
copyright: © openEHR Foundation
original_resource_uri: {}
- language: ISO_639-1::pt-br
purpose: Representação dos dados demográficos de uma pessoa.
keywords: [serviço demográfico, dados de uma pessoa]
use: Usado em serviço demográficos para coletar os dados de uma pessoa.
copyright: © openEHR Foundation
original_resource_uri: {}
other_details: {references: 'ISO/TS 22220:2008(E) - Identification
of Subject of Care - Technical Specification - International
Organization for Standardization.'}
definition:
attributes:
- rm_attribute_name: details
children:
- includes:
- expression:
left_operand: {item: archetype_id/value, reference_type:
CONSTANT, type: STRING}
right_operand:
item: {pattern: '(person_details)[a-zA-Z0-9_-]*\.v1'}
reference_type: CONSTANT
type: String
operator: OP_MATCHES
precedence_overridden: false
type: BOOLEAN
rm_type_name: ITEM_TREE
occurrences: [1, 1]
node_i_d: at0001
any_allowed: false
path: /details[at0001]
any_allowed: false
path: /details
- rm_attribute_name: identities
children:
- includes:
- expression:
left_operand: {item: archetype_id/value, reference_type:
CONSTANT, type: STRING}
right_operand:
item: {pattern: '(person_name)[a-zA-Z0-9_-]*\.v1'}
reference_type: CONSTANT
type: String
operator: OP_MATCHES
precedence_overridden: false
type: BOOLEAN
rm_type_name: PARTY_IDENTITY
occurrences: [1, 1]
node_i_d: at0002
any_allowed: false
path: /identities[at0002]
any_allowed: false
path: /identities
- rm_attribute_name: contacts
children:
- attributes:
- rm_attribute_name: addresses
children:
- includes:
- expression:
left_operand: {item: archetype_id/value, reference_type:
CONSTANT, type: STRING}
right_operand:
item: {pattern: '(address)([a-zA-Z0-9_-]+)*\.v1'}
reference_type: CONSTANT
type: String
operator: OP_MATCHES
precedence_overridden: false
type: BOOLEAN
- expression:
left_operand: {item: archetype_id/value, reference_type:
CONSTANT, type: STRING}
right_operand:
item: {pattern: '(electronic_communication)[a-zA-Z0-9_-]*\.v1'}
reference_type: CONSTANT
type: String
operator: OP_MATCHES
precedence_overridden: false
type: BOOLEAN
rm_type_name: ADDRESS
occurrences: [1, 1]
node_i_d: at0030
any_allowed: false
path: /contacts[at0003]/addresses[at0030]
any_allowed: false
path: /contacts[at0003]/addresses
rm_type_name: CONTACT
occurrences: [1, 1]
node_i_d: at0003
any_allowed: false
path: /contacts[at0003]
any_allowed: false
path: /contacts
- rm_attribute_name: relationships
children:
- attributes:
- rm_attribute_name: details
children:
- attributes:
- rm_attribute_name: items
children:
- attributes:
- rm_attribute_name: value
children:
- attributes: []
rm_type_name: DV_TEXT
occurrences: [1, 1]
any_allowed: true
path: /relationships[at0004]/details/items[at0040]/value
- attributes:
- rm_attribute_name: defining_code
children:
- reference: ac0000
rm_type_name: CodePhrase
occurrences: [1, 1]
any_allowed: false
path:
/relationships[at0004]/details/items[at0040]/value/defining_code
any_allowed: false
path:
/relationships[at0004]/details/items[at0040]/value/defining_code
rm_type_name: DV_CODED_TEXT
occurrences: [1, 1]
any_allowed: false
path: /relationships[at0004]/details/items[at0040]/value
any_allowed: false
path: /relationships[at0004]/details/items[at0040]/value
rm_type_name: ELEMENT
occurrences: [1, 1]
node_i_d: at0040
any_allowed: false
path: /relationships[at0004]/details/items[at0040]
any_allowed: false
path: /relationships[at0004]/details/items
rm_type_name: ITEM_TREE
occurrences: [1, 1]
any_allowed: false
path: /relationships[at0004]/details
any_allowed: false
path: /relationships[at0004]/details
rm_type_name: PARTY_RELATIONSHIP
occurrences: [1, 1]
node_i_d: at0004
any_allowed: false
path: /relationships[at0004]
any_allowed: false
path: /relationships
rm_type_name: PERSON
occurrences: [1, 1]
node_i_d: at0000
any_allowed: false
path: /
ontology:
term_definitions_list:
- language: pt-br
definitions:
- code: at0000
items: {text: Dados da pessoa, description: Dados da pessoa.}
- code: at0001
items: {text: Detalhes, description: Detalhes demográficos da pessoa.}
- code: at0002
items: {text: Nome, description: Conjunto de dados que
especificam o nome da pessoa.}
- code: at0003
items: {text: Contatos, description: Contatos da pessoa.}
- code: at0004
items: {text: Relacionamentos, description: 'Relacionamentos de
uma pessoa, especialmente laços familiares.'}
- code: at0030
items: {text: Endereço, description: 'Endereços vinculados a um
único contato, ou seja, com o mesmo período de validade.'}
- code: at0040
items: {text: Grau de parentesco, description: Define o grau de
parentesco entre as pessoas envolvidas.}
- language: en
definitions:
- code: at0000
items: {text: Person, description: Personal demographic data.}
- code: at0001
items: {text: Demographic details, description: A person's
demographic details.}
- code: at0002
items: {text: Name, description: A person's name.}
- code: at0003
items: {text: Contacts, description: A person's contacts.}
- code: at0004
items: {text: Relationships, description: 'A person''s
relationships, especially family ties.'}
- code: at0030
items: {text: Addresses, description: 'Addresses linked to a
single contact, i.e. with the same time validity.'}
- code: at0040
items: {text: Relationship type, description: Defines the type
of relationship between related persons.}
constraint_definitions_list:
- language: pt-br
definitions:
- code: ac0000
items: {text: Códigos para tipo de parentesco, description:
códigos válidos para tipo de parentesco.}
- language: en
definitions:
- code: ac0000
items: {text: Codes for type of relationship, description: Valid
codes for type of relationship.}
term_binding_list: []
constraint_binding_list: []
is_controlled: false