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)) } . }