Tipos de conteúdo
O CDS v0.2.0 usa tipos de conteúdo baseados em URI em vez de extensões MIME de fornecedor. Todo tipo de conteúdo é uma URI HTTP dereferenciável que resolve para uma descrição JSON-LD do schema.
O problema com tipos opacos
Seção intitulada “O problema com tipos opacos”A v0.1.0 usava strings MIME como
application/vnd.cds.lottery-brazil.mega-sena-result+json;v=1. Eram
informativas, mas não resolvíveis — você não podia buscar a string para aprender o que
ela descrevia. Eram identificadores opacos, não Linked Data.
Tipos de conteúdo URI (v0.2.0)
Seção intitulada “Tipos de conteúdo URI (v0.2.0)”https://signed-data.org/vocab/{domain-slug}/{schema-slug}Todo tipo de conteúdo codifica:
| Parte | Significado | Exemplo |
|---|---|---|
| Base | Namespace fixo | https://signed-data.org/vocab/ |
{domain-slug} | Domínio semântico (pontos → hifens) | lottery-brazil |
{schema-slug} | Schema do evento dentro do domínio (pontos → hifens) | mega-sena-result |
Exemplos:
https://signed-data.org/vocab/lottery-brazil/mega-sena-resulthttps://signed-data.org/vocab/sports-football/match-resulthttps://signed-data.org/vocab/weather/forecast-currenthttps://signed-data.org/vocab/news/headlinehttps://signed-data.org/vocab/finance-brazil/rate-selichttps://signed-data.org/vocab/commodities-brazil/futures-sojahttps://signed-data.org/vocab/companies-brazil/profile-cnpjCada URI resolve para um documento JSON-LD descrevendo o schema, seu domínio e links para a fonte certificada.
Regras de transformação de slug
Seção intitulada “Regras de transformação de slug”Nomes de domínio e schema usam pontos no código (ex.: lottery.brazil,
mega-sena.result). Em URIs, todos os pontos viram hifens:
("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-currentURIs de fontes são diferentes — os pontos são mantidos:
"caixa.gov.br.loterias.v1" → .../sources/caixa.gov.br.loterias.v1Usando tipos de conteúdo no código
Seção intitulada “Usando tipos de conteúdo no código”from cds.vocab import CDSVocab, CDSSources, content_type_urifrom cds.sources.lottery_models import LotteryContentTypes
# Constantes pré-construídasct = CDSVocab.LOTTERY_MEGA_SENAct = LotteryContentTypes.MEGA_SENA # mesmo valor
# Construir a partir de domínio + schemact = content_type_uri("lottery.brazil", "mega-sena.result")# → "https://signed-data.org/vocab/lottery-brazil/mega-sena-result"
# Em um eventoevent.content_type # string URIevent.domain # atalho → "lottery.brazil"event.event_type # atalho → "mega-sena.result"import { CDSVocab, contentTypeUri } from "@signeddata/cds-sdk";import { LotteryContentTypes } from "@signeddata/cds-sdk";
const ct = CDSVocab.LOTTERY_MEGA_SENA;const ct2 = contentTypeUri("lottery.brazil", "mega-sena.result");// → "https://signed-data.org/vocab/lottery-brazil/mega-sena-result"Roteamento por tipo de conteúdo
Seção intitulada “Roteamento por tipo de conteúdo”Como o tipo de conteúdo é uma URI, sistemas podem rotear eventos sem inspecionar o 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)Dereferenciamento
Seção intitulada “Dereferenciamento”Uma URI de tipo de conteúdo não é apenas um rótulo — ela resolve para um documento JSON-LD:
curl https://signed-data.org/vocab/lottery-brazil/mega-sena-resultRetorna a definição do schema incluindo seu domínio, descrição e link para a fonte certificada.
Convenções de nomenclatura
Seção intitulada “Convenções de nomenclatura”- Domínio: minúsculas, pontos para hierarquia →
sports.football,government.brazil - Nome do schema: minúsculas, pontos ou hifens →
match.result,mega-sena.result - Em URIs: todos os pontos viram hifens →
sports-football,mega-sena-result - No código: use as constantes pré-construídas (ex.:
CDSVocab.LOTTERY_MEGA_SENA)
Registrando um novo tipo de conteúdo
Seção intitulada “Registrando um novo tipo de conteúdo”Para adicionar um novo domínio ou schema ao padrão:
- Abra uma issue em
signed-data/cdscom o labeldomain-proposal - Inclua: fonte de dados, resposta de exemplo, rascunho do schema do payload
- Crie um PR adicionando
spec/domains/{domain}.mdevocab/domains/{domain}.jsonld - Adicione modelos e ingestor ao SDK