A confusão clássica: as pessoas tratam OWL e SHACL como "duas formas de fazer schema RDF". Não são. OWL infere fatos novos sob o pressuposto de mundo aberto. SHACL valida o grafo contra contratos sob mundo fechado. Usar OWL onde você queria SHACL = bug silencioso que nunca falha.

Em uma tabela

OWLSHACL
PropósitoInferir fatos novosValidar conformidade
Pressuposto do mundoOpen-world (OWA)Closed-world (CWA)
Falta de fato significa"Ainda não sabemos"Os dados são avaliados como estão; o que falta só viola se alguma constraint exigia (sh:minCount)
Unique Name AssumptionNÃO (URIs diferentes podem ser a mesma coisa)SIM (cada URI é único)
Quando disparaToda vez que reasoner rodaQuando você valida explicitamente
OutputMais triplas (fatos inferidos)Report de violações
Análogo familiar"View materializada" — gera dados derivados"CHECK constraint" — rejeita dados ruins
A pergunta clássica de entrevista: "Regra: todo Deck precisa ter ≥99 cartas. Implementa em OWL ou SHACL?" — SHACL. Por quê? OWL não rejeita: sob mundo aberto, "Deck X só tem 60 cartas" é interpretado como "as outras 39 ainda não foram afirmadas". OWL não acusa. SHACL acusa.

Quando usar cada

Use OWL paraUse SHACL para
Hierarquia de classes (Creature ⊑ Card)"Card tem que ter exatamente 1 nome"
Inferência transitiva (ancestral, descendente)"Mana cost só permite letras WUBRGC e dígitos"
Domínio/range de propriedade"Deck precisa de ≥60 cartas, ≤2 wins"
Identidade implícita (owl:sameAs)Cardinalidade exata (≥, ≤, =)
Reasoner (Pellet, HermiT) deduz fatos — materializando antes (forward-chaining) ou na consulta (backward-chaining)Validação no pipeline ETL

Onde o SKOS entra

OWL e SHACL não são as únicas ferramentas do stack — SKOS (Simple Knowledge Organization System) organiza vocabulários controlados, taxonomias e tesauros. A pergunta que separa todas é a mesma: o que significa um fato estar faltando?

Você querFerramentaFato faltando significa
Deduzir estrutura não declaradaOWL + reasonerDesconhecido — pode existir
Verificar se os dados obedecem regrasSHACLViolação, se a regra exigia
Perguntar o que está láSPARQLSimplesmente não retorna
Organizar vocabulário para indexar e buscarSKOS
SKOS foi desenhado para não precisar de reasoner.skos:broader deliberadamente não é transitivo; skos:broaderTransitive existe como propriedade separada exatamente para que tesauros funcionem sob SPARQL puro (na prática, skos:broader+ com property path resolve). E as condições de integridade do SKOS (S13: prefLabel/altLabel/hiddenLabel disjuntos; S14: um prefLabel por idioma; S27: related disjunto de broaderTransitive; S46: exactMatch disjunto de broadMatch/relatedMatch) são condições a verificar, não axiomas a deduzir — algumas, como a cardinalidade por idioma da S14, nem sequer são expressáveis em OWL. Por isso qSKOS e todo validador SKOS são construídos sobre SPARQL.
Diferença entre OWL e SHACL em uma frase
OWL infere fatos novos sob mundo aberto; SHACL valida o grafo contra contratos sob mundo fechado. OWL é sobre "o que mais é verdade?", SHACL é sobre "isso aqui está conforme?". Em produção, você usa os dois: OWL para enriquecer o grafo com fatos derivados, SHACL para garantir que dados ingeridos respeitam invariantes do domínio.