name keywords google etiquetas ejemplos tags yaml specifications pyyaml

tags - keywords - No entiendo que es una etiqueta YAML



meta tags google (1)

No sé mucho sobre YAML pero le daré una oportunidad:

Las etiquetas se utilizan para denotar tipos. Se declara una etiqueta usando ! Como has visto en el "refcard" de allí. La directiva %TAG es como declarar un acceso directo a una etiqueta.

Voy a demostrar con PyYaml. PyYaml puede analizar la etiqueta secundaria de !!python/object: como un objeto de python real. El signo de exclamación doble es una sustitución en sí misma, abreviatura de !tag:yaml.org,2002: que convierte la expresión completa en !tag:yaml.org,2002:python/object: Esta expresión es un poco difícil de manejar cada vez que queremos crear un objeto, así que le damos un alias usando la directiva %TAG :

%TAG !py! tag:yaml.org,2002:python/object: # declares the tag alias --- - !py!__main__.MyClass # creates an instance of MyClass - !!python/object:__main__.MyClass # equivalent with no alias - !<tag:yaml.org,2002:python/object:__main__.MyClass> # equivalent using primary tag

Los nodos se analizan por su tipo predeterminado si no tiene anotaciones de etiqueta. Los siguientes son equivalentes:

- 1: Alex - !!int "1": !!str "Alex"

Aquí hay un programa completo de Python que usa PyYaml demostrando el uso de la etiqueta:

import yaml class Entity: def __init__(self, idNum, components): self.id = idNum self.components = components def __repr__(self): return "%s(id=%r, components=%r)" % ( self.__class__.__name__, self.id, self.components) class Component: def __init__(self, name): self.name = name def __repr__(self): return "%s(name=%r)" % ( self.__class__.__name__, self.name) text = """ %TAG !py! tag:yaml.org,2002:python/object:__main__. --- - !py!Component &transform name: Transform - !!python/object:__main__.Component &render name: Render - !<tag:yaml.org,2002:python/object:__main__.Entity> id: 123 components: [*transform, *render] - !<tag:yaml.org,2002:int> "3" """ result = yaml.load(text)

Más información está disponible en la spec

Lo obtengo en algún nivel, pero aún no he visto un ejemplo que no haya generado más preguntas que respuestas.

http://rhnh.net/2011/01/31/yaml-tutorial

# Set.new([1,2]).to_yaml --- !ruby/object:Set hash: 1: true 2: true

Entiendo que estamos declarando una etiqueta Set. No entiendo qué tiene que ver el mapeo hash posterior con eso. ¿Estamos declarando un esquema? ¿Puede alguien mostrarme un ejemplo con múltiples declaraciones de etiquetas?

He leído la especificación: http://yaml.org/spec/1.2/spec.html#id2761292

%TAG ! tag:clarkevans.com,2002:

¿Esto es declarar un esquema? ¿Hay algo más que un analizador tiene que hacer para analizar correctamente el archivo? ¿Un archivo de esquema de algún tipo?

http://www.yaml.org/refcard.html

Tag property: # Usually unspecified. none : Unspecified tag (automatically resolved by application). ''!'' : Non-specific tag (by default, "!!map"/"!!seq"/"!!str"). ''!foo'' : Primary (by convention, means a local "!foo" tag). ''!!foo'' : Secondary (by convention, means "tag:yaml.org,2002:foo"). ''!h!foo'': Requires "%TAG !h! <prefix>" (and then means "<prefix>foo"). ''!<foo>'': Verbatim tag (always means "foo").

¿Por qué es relevante tener una etiqueta primaria y secundaria, y por qué una etiqueta secundaria se refiere a un URI? ¿Qué problema se está resolviendo al tener estos?

Parece que veo un montón de "lo que son", y no "por qué están allí" o "para qué se usan".