SKOS Demo 2026-06-08

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 .