Zum Inhalt springen

Correctness, License & Provenance

Dieser Inhalt ist noch nicht in deiner Sprache verfügbar.

Assume nothing silently, fake nothing, and document where the data comes from and under which rights. Correctness and provenance are what separate a schema that passes from one that can be trusted.


Don’t paper over a missing parameter or a failed call. The model needs to know the difference between “no result” and “the call broke”:

// BAD — hides a missing input and a failed request:
const limit = payload.limit || 10
if( res.status >= 400 ) { return { response: { items: [] } } } // looks empty, was actually a 401
// GOOD — explicit:
if( payload.limit === undefined ) { throw new Error( 'REQ-001: limit is required' ) }
if( res.status >= 400 ) { throw new Error( `HTTP-${ res.status }: upstream rejected the request` ) }

A result counts as working only when the call succeeded and returned non-empty, non-duplicate data. A 4xx/5xx or an empty body is a failure, never a quiet success.

When a schema ingests a flat file, state every parse rule — separator, date format, column mapping, type coercion. Guessing turns 0/1 flags into booleans, or "01/02" into the wrong month:

parseConfig: {
delimiter: ';',
dateFormat: 'YYYY-MM-DD',
columns: { plz: 'string', active: 'integer' } // active = 0|1 stays an integer, not a boolean
}
// missing parseConfig → fail loudly (e.g. CSV-CFG-001), never assume defaults

Never commit real provider responses to a public repo — that can breach the source’s license. Ship small synthetic fixtures under a permissive license (CC0) for tests, and keep production data separate:

tests/fixtures/markets.sample.json ← hand-made, CC0, 3 rows — safe to publish
(real API responses) ← never committed

Expose all endpoints the API documents, and justify any you leave out. An unjustified reduction lowers interoperability — fewer tools means fewer connections to other schemas.

Put the ToS URL in the schema itself, so nobody has to hunt for it twice:

main = {
termsOfService: 'https://acme.example/terms',
termsOfServiceCheckedAt: '2024-05-29',
termsOfServiceLanguage: 'en'
// sentinel 'no-tos-found' is allowed when a source genuinely has none
}

A small workflow can fetch the URL, run a robots/legal check, and stamp these fields — turning a one-off search into a recorded fact.