PREFIX st:
PREFIX rdf:
PREFIX owl:
PREFIX dcterms:
PREFIX dc:
PREFIX fun:
PREFIX rdfs:
PREFIX skos:
PREFIX obo:
PREFIX swrl:
PREFIX prov:
BASE
TEMPLATE ( ?class , ?first ) {
TEMPLATE {
"{fun:prefixedIRI(?class)}"
"c"
}
WHERE {
FILTER(ISURI(?class))
OPTIONAL { ?class rdfs:comment ?comment }
BIND( IF(BOUND(?comment), ?comment, "<>") AS ?commentStr )
} .
TEMPLATE {
IF(!?first, " (", "")
# see http://www.w3.org/TR/2012/REC-owl2-primer-20121211/#Classes_and_Instances
TEMPLATE {
TEMPLATE ( ?C , false ) .
; separator= " and "
}
WHERE {
?class owl:intersectionOf / rdf:rest* / rdf:first ?C
} .
TEMPLATE {
TEMPLATE ( ?C , false ) .
; separator= " or "
}
WHERE {
?class owl:unionOf / rdf:rest* / rdf:first ?C
} .
TEMPLATE {
" not "
TEMPLATE ( ?C , false ) .
}
WHERE {
?class owl:complementOf ?C
} .
TEMPLATE {
before= "one of \{ " ;
TEMPLATE ( ?ni ) .
; separator= ", "
; after= " } "
}
WHERE {
?class owl:oneOf / rdf:rest* / rdf:first ?ni
} .
# object property restrictions
TEMPLATE {
# universal
TEMPLATE {
TEMPLATE ( ?property ) .
" only "
TEMPLATE ( ?only , false ) .
}
WHERE {
?class owl:allValuesFrom ?only
} .
# existential
TEMPLATE {
TEMPLATE ( ?property ) .
" some "
TEMPLATE ( ?some , false ) .
}
WHERE {
?class owl:someValuesFrom ?some
} .
# individual value
TEMPLATE {
TEMPLATE ( ?property ) .
" value "
TEMPLATE ( ?value ) .
}
WHERE {
?class owl:hasValue ?value
} .
# local reflexivity
TEMPLATE {
" has self "
TEMPLATE ( ?property ) .
}
WHERE {
?class owl:hasSelf true
} .
# exact cardinality
TEMPLATE {
TEMPLATE ( ?property ) .
" exactly { ?cardinality } "
}
WHERE {
?class owl:cardinality ?cardinality .
} .
# qualified exact cardinality
TEMPLATE {
TEMPLATE ( ?property ) .
" exactly { ?cardinality } "
TEMPLATE ( ?C , false ) .
}
WHERE {
?class owl:qualifiedCardinality ?cardinality ;
owl:onClass ?C .
} .
# maximum cardinality
TEMPLATE {
TEMPLATE ( ?property ) .
" max { ?cardinality } "
}
WHERE {
?class owl:maxCardinality ?cardinality .
} .
# qualified maximum cardinality
TEMPLATE {
TEMPLATE ( ?property ) .
" max { ?cardinality } "
TEMPLATE ( ?C , false ) .
}
WHERE {
?class owl:maxQualifiedCardinality ?cardinality ;
owl:onClass ?C .
} .
# minimum cardinality
TEMPLATE {
TEMPLATE ( ?property ) .
" min { ?cardinality } "
}
WHERE {
?class owl:minCardinality ?cardinality .
} .
# qualified minimum cardinality
TEMPLATE {
TEMPLATE ( ?property ) .
" min { ?cardinality } "
TEMPLATE ( ?C , false ) .
}
WHERE {
?class
owl:minQualifiedCardinality ?cardinality ;
owl:onClass ?C .
} .
}
WHERE {
?class owl:onProperty ?property .
{ ?property a owl:ObjectProperty }
UNION
{ ?property owl:inverseOf [] }
UNION
{ [] owl:inverseOf ?property }
UNION
{
FILTER( ?property = owl:topObjectProperty || ?property = owl:bottomObjectProperty)
}
} LIMIT 1 .
# data property restrictions
TEMPLATE {
# universal
TEMPLATE {
TEMPLATE ( ?property ) .
" only "
TEMPLATE ( ?only ) .
}
WHERE {
?class owl:allValuesFrom ?only
} .
# existential
TEMPLATE {
TEMPLATE ( ?property ) .
" some "
TEMPLATE ( ?some ) .
}
WHERE {
?class owl:someValuesFrom ?some
} .
# individual value
TEMPLATE {
TEMPLATE ( ?property ) .
" value "
TEMPLATE ( ?value ) .
}
WHERE {
?class owl:hasValue ?value
} .
# exact cardinality
TEMPLATE {
TEMPLATE ( ?property ) .
" exactly { ?cardinality } "
}
WHERE {
?class owl:cardinality ?cardinality .
} .
# qualified exact cardinality
TEMPLATE {
TEMPLATE ( ?property ) .
" exactly { ?cardinality } "
TEMPLATE ( ?D ) .
}
WHERE {
?class owl:qualifiedCardinality ?cardinality ;
owl:onDataRange ?D .
} .
# maximum cardinality
TEMPLATE {
TEMPLATE ( ?property ) .
" max { ?cardinality } "
}
WHERE {
?class owl:maxCardinality ?cardinality .
} .
# qualified maximum cardinality
TEMPLATE {
TEMPLATE ( ?property ) .
" max { ?cardinality } "
TEMPLATE ( ?D ) .
}
WHERE {
?class owl:maxQualifiedCardinality ?cardinality ;
owl:onDataRange ?D .
} .
# minimum cardinality
TEMPLATE {
TEMPLATE ( ?property ) .
" min { ?cardinality } "
}
WHERE {
?class owl:minCardinality ?cardinality .
} .
# qualified minimum cardinality
TEMPLATE {
TEMPLATE ( ?property ) .
" min { ?cardinality } "
TEMPLATE ( ?D ) .
}
WHERE {
?class owl:minQualifiedCardinality ?cardinality ;
owl:onDataRange ?D .
} .
}
WHERE {
?class owl:onProperty ?property .
{ ?property a owl:DatatypeProperty }
UNION
{
FILTER( ?property = owl:topDataProperty || ?property = owl:bottomDataProperty)
}
} .
IF(!?first, ")", "")
}
WHERE {
FILTER(ISBLANK(?class))
} .
}