@prefix owl:       <http://www.w3.org/2002/07/owl#> .
@prefix rdf:       <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xsd:       <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs:      <http://www.w3.org/2000/01/rdf-schema#> .

@prefix ottr:      <http://ns.ottr.xyz/templates#> .
@prefix ax:        <http://candidate.ottr.xyz/owl/axiom/> .
@prefix rstr:      <http://candidate.ottr.xyz/owl/restriction/> .

@prefix :          <http://draft.ottr.xyz/pizza/NamedPizza#> .
@prefix pizza:     <http://draft.ottr.xyz/pizza/NamedPizza> . 
@prefix p:         <http://www.co-ode.org/ontologies/pizza/pizza.owl#> .
pizza:NamedPizza a ottr:Template ;
ottr:parameters ( 

[ ottr:type owl:Class;    ##(ref:param1)
  ottr:variable _:pizza ] 

[ ottr:type owl:NamedIndividual; ##(ref:param2)
  ottr:variable _:country; 
  ottr:modifier ottr:optional ]

[ ottr:type ( rdf:List owl:Class ); ##(ref:param3)
  ottr:variable _:toppings; ] ) ;

ottr:pattern
[ ottr:of ax:SubClassOf ;                    ##(ref:patinst1)
  ottr:values ( _:pizza p:NamedPizza ) ] ,

[ ottr:of ax:SubObjectSomeValuesFrom ;       ##(ref:patinst2)
  ottr:arguments (
    [ ottr:value _:pizza ] 
    [ ottr:value p:hasTopping ] 
    [ ottr:value _:toppings; 
      ottr:modifier ottr:listExpand ] ) ;    ##(ref:patinst2listExp)
  ottr:modifier ottr:cross ] ,               ##(ref:patinst2cross)

[ ottr:of  ax:SubObjectHasValue ;           ##(ref:patinst3)
  ottr:values 
    ( _:pizza p:hasCountryOfOrigin _:country ) ] ,

[ ottr:of ax:SubObjectAllValuesFrom ;       ##(ref:patinst4)
  ottr:values 
    ( :pizza p:hasTopping _:alltoppings ) ] ,

[ ottr:of rstr:ObjectUnionOf ;              ##(ref:patinst5)
  ottr:values 
    ( _:alltoppings _:toppings ) ] ; # end pattern

## new feature 
ottr:annotation  
[ ottr:of <http://example.net/ns#TemplateAnnotation> ;   ##(ref:anninst1)
  ottr:values ( pizza:NamedPizza "A pizza template" ) ] .
