Ir al contenido

Tipos de contenido

CDS v0.2.0 usa tipos de contenido basados en URI en lugar de extensiones de proveedor MIME. Cada tipo de contenido es un URI HTTP dereferenciable que se resuelve a una descripción JSON-LD del esquema.

v0.1.0 usaba cadenas MIME como application/vnd.cds.lottery-brazil.mega-sena-result+json;v=1. Eran informativas pero no resolubles — no podías obtener la cadena para aprender lo que describía. Eran identificadores opacos, no Linked Data.

https://signed-data.org/vocab/{domain-slug}/{schema-slug}

Cada tipo de contenido codifica:

ParteSignificadoEjemplo
BaseNamespace fijohttps://signed-data.org/vocab/
{domain-slug}Dominio semántico (puntos → guiones)lottery-brazil
{schema-slug}Esquema del evento dentro del dominio (puntos → guiones)mega-sena-result

Ejemplos:

https://signed-data.org/vocab/lottery-brazil/mega-sena-result
https://signed-data.org/vocab/sports-football/match-result
https://signed-data.org/vocab/weather/forecast-current
https://signed-data.org/vocab/news/headline
https://signed-data.org/vocab/finance-brazil/rate-selic
https://signed-data.org/vocab/commodities-brazil/futures-soja
https://signed-data.org/vocab/companies-brazil/profile-cnpj

Cada URI se resuelve a un documento JSON-LD que describe el esquema, su dominio y enlaces a la fuente certificada.

Los nombres de dominio y esquema usan puntos en el código (p. ej., lottery.brazil, mega-sena.result). En los URIs, todos los puntos se convierten en guiones:

("lottery.brazil", "mega-sena.result") → .../vocab/lottery-brazil/mega-sena-result
("sports.football", "match.result") → .../vocab/sports-football/match-result
("weather", "forecast.current") → .../vocab/weather/forecast-current

Los URIs de fuentes son distintos — se mantienen los puntos:

"caixa.gov.br.loterias.v1" → .../sources/caixa.gov.br.loterias.v1
from cds.vocab import CDSVocab, CDSSources, content_type_uri
from cds.sources.lottery_models import LotteryContentTypes
# Constantes preconstruidas
ct = CDSVocab.LOTTERY_MEGA_SENA
ct = LotteryContentTypes.MEGA_SENA # mismo valor
# Construir desde dominio + esquema
ct = content_type_uri("lottery.brazil", "mega-sena.result")
# → "https://signed-data.org/vocab/lottery-brazil/mega-sena-result"
# En un evento
event.content_type # cadena URI
event.domain # atajo → "lottery.brazil"
event.event_type # atajo → "mega-sena.result"

Como el tipo de contenido es un URI, los sistemas pueden enrutar eventos sin inspeccionar el payload:

{
"source": ["cds.lottery.brazil"],
"detail-type": ["mega-sena.result"]
}
if event.domain == "lottery.brazil" and event.event_type == "mega-sena.result":
result = MegaSenaResult(**event.payload)

Un URI de tipo de contenido no es solo una etiqueta — se resuelve a un documento JSON-LD:

Ventana de terminal
curl https://signed-data.org/vocab/lottery-brazil/mega-sena-result

Devuelve la definición del esquema, incluyendo su dominio, descripción y enlace a la fuente certificada.

  • Dominio: minúsculas, puntos para jerarquía → sports.football, government.brazil
  • Nombre del esquema: minúsculas, puntos o guiones → match.result, mega-sena.result
  • En URIs: todos los puntos se convierten en guiones → sports-football, mega-sena-result
  • En código: usa las constantes preconstruidas (p. ej., CDSVocab.LOTTERY_MEGA_SENA)

Para añadir un nuevo dominio o esquema al estándar:

  1. Abre un issue en signed-data/cds con la etiqueta domain-proposal
  2. Incluye: fuente de datos, ejemplo de respuesta, borrador del esquema del payload
  3. Crea un PR añadiendo spec/domains/{domain}.md y vocab/domains/{domain}.jsonld
  4. Añade modelos e ingestor al SDK