SKOS Demo 2026-06-08#
Transfer von https://www.jbusse.de/logd/pplan_minimal/von-3-star-nach-5-star.html#turtle-erzeugen
Wir fragen Google.AI:
skos, ttl. Ich will einen SKOS-Thesaurus bauen: Pferd BT Mammal Mammel BT Tier
Google gibt folgende Bsp zurück:
turtlestring = """
@prefix ex: <http://example.org> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix ex: <http://example.org> .
# Definition des Begriffssystems
ex:TierThesaurus a skos:ConceptScheme ;
skos:prefLabel "Tier-Thesaurus"@de .
# Konzept: Tier
ex:Tier a skos:Concept ;
skos:prefLabel "Tier"@de ;
skos:topConceptOf ex:TierThesaurus .
# Konzept: Mammal (Säugetier)
ex:Mammal a skos:Concept ;
skos:prefLabel "Mammal"@en ;
skos:altLabel "Säugetier"@de ;
skos:broader ex:Tier ;
skos:inScheme ex:TierThesaurus .
# Konzept: Pferd
ex:Pferd a skos:Concept ;
skos:prefLabel "Pferd"@de ;
skos:broader ex:Mammal ;
skos:inScheme ex:TierThesaurus .
"""
def focus(focus_string_list, ttl):
return "\n\n".join( [ paragraph for paragraph in ttl.split("\n\n") \
if any( [ focus_string in paragraph for focus_string in focus_string_list ] ) ] )
rdflib#
import rdflib
# turtlestring als RDF Graph parsen
g = rdflib.Graph().parse( data=turtlestring )
# und die interne Repräsentation wieder serialisieren
print( g.serialize(format="ttl") )
@prefix ex: <http://example.org> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
ex:Pferd a skos:Concept ;
skos:broader ex:Mammal ;
skos:inScheme ex:TierThesaurus ;
skos:prefLabel "Pferd"@de .
ex:Mammal a skos:Concept ;
skos:altLabel "Säugetier"@de ;
skos:broader ex:Tier ;
skos:inScheme ex:TierThesaurus ;
skos:prefLabel "Mammal"@en .
ex:Tier a skos:Concept ;
skos:prefLabel "Tier"@de ;
skos:topConceptOf ex:TierThesaurus .
ex:TierThesaurus a skos:ConceptScheme ;
skos:prefLabel "Tier-Thesaurus"@de .
Wir wollen die SKOS-Ontologie importieren. In RDFlib liest man einfach weiteren Code in den bestehenden Graphen – hier g – ein.
g.parse("http://www.w3.org/2004/02/skos/core#")
<Graph identifier=N31b54531558d4e9f95c8c9f66c72146b (<class 'rdflib.graph.Graph'>)>
# und die intererne Repräsentation wieder ausgeben
# alles:
# print( g.serialize(format="ttl") )
# nur alle "Absätze" die ein paar bestimmte Strings enthalten:
print( focus( ["Pferd", "broader" ], g.serialize(format="ttl") ) )
ex:Pferd a skos:Concept ;
skos:broader ex:Mammal ;
skos:inScheme ex:TierThesaurus ;
skos:prefLabel "Pferd"@de .
ex:Mammal a skos:Concept ;
skos:altLabel "Säugetier"@de ;
skos:broader ex:Tier ;
skos:inScheme ex:TierThesaurus ;
skos:prefLabel "Mammal"@en .
skos:broadMatch a rdf:Property,
owl:ObjectProperty ;
rdfs:label "has broader match"@en ;
rdfs:isDefinedBy <http://www.w3.org/2004/02/skos/core> ;
rdfs:subPropertyOf skos:broader,
skos:mappingRelation ;
owl:inverseOf skos:narrowMatch ;
skos:definition "skos:broadMatch is used to state a hierarchical mapping link between two conceptual resources in different concept schemes."@en .
skos:hasTopConcept a rdf:Property,
owl:ObjectProperty ;
rdfs:label "has top concept"@en ;
rdfs:domain skos:ConceptScheme ;
rdfs:isDefinedBy <http://www.w3.org/2004/02/skos/core> ;
rdfs:range skos:Concept ;
owl:inverseOf skos:topConceptOf ;
skos:definition "Relates, by convention, a concept scheme to a concept which is topmost in the broader/narrower concept hierarchies for that scheme, providing an entry point to these hierarchies."@en .
skos:related a rdf:Property,
owl:ObjectProperty,
owl:SymmetricProperty ;
rdfs:label "has related"@en ;
rdfs:comment "skos:related is disjoint with skos:broaderTransitive"@en ;
rdfs:isDefinedBy <http://www.w3.org/2004/02/skos/core> ;
rdfs:subPropertyOf skos:semanticRelation ;
skos:definition "Relates a concept to a concept with which there is an associative semantic relationship."@en .
skos:broader a rdf:Property,
owl:ObjectProperty ;
rdfs:label "has broader"@en ;
rdfs:comment "Broader concepts are typically rendered as parents in a concept hierarchy (tree)."@en ;
rdfs:isDefinedBy <http://www.w3.org/2004/02/skos/core> ;
rdfs:subPropertyOf skos:broaderTransitive ;
owl:inverseOf skos:narrower ;
skos:definition "Relates a concept to a concept that is more general in meaning."@en ;
skos:scopeNote "By convention, skos:broader is only used to assert an immediate (i.e. direct) hierarchical link between two conceptual resources."@en .
skos:broaderTransitive a rdf:Property,
owl:ObjectProperty,
owl:TransitiveProperty ;
rdfs:label "has broader transitive"@en ;
rdfs:isDefinedBy <http://www.w3.org/2004/02/skos/core> ;
rdfs:subPropertyOf skos:semanticRelation ;
owl:inverseOf skos:narrowerTransitive ;
skos:definition "skos:broaderTransitive is a transitive superproperty of skos:broader." ;
skos:scopeNote "By convention, skos:broaderTransitive is not used to make assertions. Rather, the properties can be used to draw inferences about the transitive closure of the hierarchical relation, which is useful e.g. when implementing a simple query expansion algorithm in a search application."@en .
skos:narrower a rdf:Property,
owl:ObjectProperty ;
rdfs:label "has narrower"@en ;
rdfs:comment "Narrower concepts are typically rendered as children in a concept hierarchy (tree)."@en ;
rdfs:isDefinedBy <http://www.w3.org/2004/02/skos/core> ;
rdfs:subPropertyOf skos:narrowerTransitive ;
owl:inverseOf skos:broader ;
skos:definition "Relates a concept to a concept that is more specific in meaning."@en ;
skos:scopeNote "By convention, skos:broader is only used to assert an immediate (i.e. direct) hierarchical link between two conceptual resources."@en .
skos:narrowerTransitive a rdf:Property,
owl:ObjectProperty,
owl:TransitiveProperty ;
rdfs:label "has narrower transitive"@en ;
rdfs:isDefinedBy <http://www.w3.org/2004/02/skos/core> ;
rdfs:subPropertyOf skos:semanticRelation ;
owl:inverseOf skos:broaderTransitive ;
skos:definition "skos:narrowerTransitive is a transitive superproperty of skos:narrower." ;
skos:scopeNote "By convention, skos:narrowerTransitive is not used to make assertions. Rather, the properties can be used to draw inferences about the transitive closure of the hierarchical relation, which is useful e.g. when implementing a simple query expansion algorithm in a search application."@en .
owlrl#
Transfer von https://www.jbusse.de/semweb/demo_2026-03-31.html
import owlrl
g2 = rdflib.Graph().parse( data=turtlestring )
g2.parse("http://www.w3.org/2004/02/skos/core#")
owlrl.DeductiveClosure(owlrl.OWLRL_Semantics,
axiomatic_triples = False).expand(g2)
#print( g2.serialize(format="ttl") )
print( focus( ["Pferd" ], g2.serialize(format="ttl") ) )
"Pferd"@de owl:sameAs "Pferd"@de .
ex:Pferd a _:Nb83a4bede05f4cdf9411a6137b5db746,
owl:Thing,
skos:Concept ;
rdfs:label "Pferd"@de ;
owl:sameAs ex:Pferd ;
skos:broader ex:Mammal ;
skos:broaderTransitive ex:Mammal,
ex:Tier ;
skos:inScheme ex:TierThesaurus ;
skos:prefLabel "Pferd"@de ;
skos:semanticRelation ex:Mammal,
ex:Tier .
ex:Mammal a _:Nb83a4bede05f4cdf9411a6137b5db746,
owl:Thing,
skos:Concept ;
rdfs:label "Säugetier"@de,
"Mammal"@en ;
owl:sameAs ex:Mammal ;
skos:altLabel "Säugetier"@de ;
skos:broader ex:Tier ;
skos:broaderTransitive ex:Tier ;
skos:inScheme ex:TierThesaurus ;
skos:narrower ex:Pferd ;
skos:narrowerTransitive ex:Pferd ;
skos:prefLabel "Mammal"@en ;
skos:semanticRelation ex:Pferd,
ex:Tier .
ex:Tier a _:Nb83a4bede05f4cdf9411a6137b5db746,
owl:Thing,
skos:Concept ;
rdfs:label "Tier"@de ;
owl:sameAs ex:Tier ;
skos:inScheme ex:TierThesaurus ;
skos:narrower ex:Mammal ;
skos:narrowerTransitive ex:Mammal,
ex:Pferd ;
skos:prefLabel "Tier"@de ;
skos:semanticRelation ex:Mammal,
ex:Pferd ;
skos:topConceptOf ex:TierThesaurus .