Theory — SKOS in a page
The five predicates you'll use every day
skos:ConceptScheme— the container. One per vocabulary you publish.skos:Concept— a term. Every concept has an IRI you control.skos:prefLabel/skos:altLabel/skos:hiddenLabel— the preferred name (one per language), alternative names (synonyms surface in search), hidden names (misspellings, deprecated terms — searchable, never displayed).skos:broader/skos:narrower— hierarchy.broaderTransitiveis automatic.skos:exactMatch/closeMatch/relatedMatch— mappings to external vocabularies (LCSH, Wikidata, Library of Congress, AGROVOC…).
The four anti-patterns
A1 — Treating prefLabel as a primary key. The IRI is the identity. Labels are display — they translate, they rename, they capitalise differently. If you join data on labels you've already failed.
A2 — Multiple prefLabel in the same language. SKOS explicitly forbids it (it would mean 'this concept has two preferred English names', which is a contradiction). If you want synonyms, that's what altLabel is for.
A3 — Cycles in broader. A taxonomy is a tree (or a DAG at worst). 'Physics broader Science broader Physics' is a vocabulary bug; SHACL can detect it.
A4 — Mixing OWL classes with SKOS concepts. :Physics a skos:Concept, owl:Class . is the worst of both worlds. Pick one. (If you can't decide, re-read lesson 1.)