<?xml version="1.0"?>

<!DOCTYPE tp SYSTEM "http://nb.vse.cz/~svabo/patomat/tp/tp.dtd" [
    <!ENTITY ar "http://www.ontologydesignpatterns.org/cp/owl/agentrole.owl#" >
    <!ENTITY or "http://www.ontologydesignpatterns.org/cp/owl/objectrole.owl#" >    
]>

<tp xmlns="http://nb.vse.cz/~svabo/patomat/tp/tp-schema.xsd">
  <op1>
    <entity_declarations>              
      <placeholder type="Class">?A</placeholder>
      <placeholder type="Class">?B</placeholder>
      <placeholder type="Class">?C</placeholder>
      <entity type="Class">&or;Object</entity>
      <entity type="Class">&or;Role</entity>
      <entity type="ObjectProperty">&or;hasRole</entity>
      <entity type="ObjectProperty">&or;isRoleOf</entity>      
      <entity type="Class">&ar;Agent</entity>
    </entity_declarations>
    <axioms>    
      <axiom>Class: ?B SubClassOf: ?A</axiom>      
      <axiom recursive="true">Class: ?C SubClassOf: ?B</axiom>
      <axiom>ObjectProperty: isRoleOf Range: Object</axiom>
      <axiom>ObjectProperty: hasRole Domain: Object</axiom>
      <axiom>ObjectProperty: hasRole Range: Role</axiom>
      <axiom>ObjectProperty: isRoleOf Domain: Role</axiom>
      <axiom>Class: Agent SubClassOf: Object</axiom>
      <axiom>Class: Agent DisjointWith: Role</axiom>      
    </axioms>
      <ndp>
	 <comparison threshold="1.0" measure="equal"><s1>?A</s1><s2>Person|person|PERSON|Human|human|HUMAN|People|people|PEOPLE</s2></comparison>
<!--       <comparison threshold="1.0" measure="equal"><s1>?C</s1><s2>Person|person|PERSON|Human|human|HUMAN|People|people|PEOPLE</s2></comparison> -->
            <!--      <exist>isHyperonymOf(Agent,?A)</exist> -->
    </ndp>
  </op1>
  <op2>
    <entity_declarations>
      <placeholder type="Class">?D</placeholder>
      <placeholder type="Class">?E</placeholder>
      <placeholder type="Class">?F</placeholder>
      <placeholder type="Class">?G</placeholder>
      <placeholder type="Class">?H</placeholder>
      <entity type="Class">&or;Object</entity>
      <entity type="Class">&or;Role</entity>
      <entity type="ObjectProperty">&or;hasRole</entity>
      <entity type="ObjectProperty">&or;isRoleOf</entity>      
      <entity type="Class">&ar;Agent</entity>
    </entity_declarations>
    <axioms>    
<!--      <axiom>Class: ?D SubClassOf: Agent</axiom> -->      
      <axiom>Class: ?E SubClassOf: ?D</axiom>
      <axiom recursive="true">Class: ?F SubClassOf: ?E</axiom>
      <axiom>Class: ?G SubClassOf: Role</axiom>                        
      <axiom recursive="true">Class: ?H SubClassOf: ?G</axiom>
      <axiom>Class: ?E EquivalentTo: ( hasRole some ?G )</axiom>
      <axiom recursive="true">Class: ?F EquivalentTo: ( hasRole some ?H )</axiom>
      <axiom>ObjectProperty: isRoleOf Range: Object</axiom>
      <axiom>ObjectProperty: hasRole Domain: Object</axiom>
      <axiom>ObjectProperty: hasRole Range: Role</axiom>
      <axiom>ObjectProperty: isRoleOf Domain: Role</axiom>
      <axiom>Class: Agent SubClassOf: Object</axiom>
      <axiom>Class: Agent DisjointWith: Role</axiom>
    </axioms>
  </op2>
  <pt>    
    <eq op1="?A" op2="?D"/>
    <eq op1="?B" op2="?E" />    
    <eq op1="?C" op2="?F" />
    <ntp entity="?G">?B+Role</ntp>
    <ntp entity="?H">?C+Role</ntp>
    <eq op1="&or;Object" op2="&or;Object"/>
    <eq op1="&or;Role" op2="&or;Role"/>
    <eq op1="&or;hasRole" op2="&or;hasRole"/>
    <eq op1="&or;isRoleOf" op2="&or;isRoleOf"/>
    <eq op1="&ar;Agent" op2="&ar;Agent"/>
  </pt>
</tp>