PREFIX st:   <http://ns.inria.fr/sparql-template/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX fun: <http://w3id.org/sparql-generate/fn/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX obo: <http://purl.obolibrary.org/obo/>
PREFIX swrl: <http://www.w3.org/2003/11/swrl#>
 
BASE <https://saref.etsi.org/documentation/>

TEMPLATE <namedIndividuals.rqg>( ?ontology, ?lang ) { 

  """\n<div id='namedindividuals'>
  <h2>{ fun:property(<en.properties>, 'namedindividuals') }</h2>""" 

  BOX { 

    # toc
    TEMPLATE {
      before = "\n<ul class='hlist'>" ;
      BOX {
        "\n<li>"
        TEMPLATE {
          "\n<a href='#{fun:prefixedIRI(?individual)}' title='{fun:prefixedIRI(?individual)}'>"
          ?langLabel
          "</a>"
        } WHERE {
          OPTIONAL { ?individual (rdfs:label|skos:prefLabel|obo:IAO_0000118) ?label }
          FILTER(LANG(?label) = str(?lang) || LANG(?label) = "" || !BOUND(?label) ).
          BIND( COALESCE( ?label , "[Named Individual without label applicable to language '@{?lang}': &lt;{fun:prefixedIRI(?individual)}&gt;]") AS ?langLabel )
        } 
        LIMIT 1 .
        "\n</li>"
      }
      ; after = "\n</ul>"
    } WHERE {
      ?individual a owl:NamedIndividual
      FILTER( ISURI(?individual) ) 
    } ORDER BY ?individual .

  }
  "\n</div>"

} WHERE {
  ?individual a owl:NamedIndividual
} LIMIT 1