title: Pellet reasoner crashes when classifying ontology with datatype restriction as pattern
body: <p>I have an ontology that defines a new data type as pattern restriction on string type. This data type is then used as a property range restriction. Then a class is defined as a restriction on this property:</p>
  
  <pre><code>@prefix : &lt;http://test.com/prop#&gt; .
  @prefix owl: &lt;http://www.w3.org/2002/07/owl#&gt; .
  @prefix rdf: &lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt; .
  @prefix xml: &lt;http://www.w3.org/XML/1998/namespace&gt; .
  @prefix xsd: &lt;http://www.w3.org/2001/XMLSchema#&gt; .
  @prefix rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt; .
  @base &lt;http://test.com/prop&gt; .
  
  &lt;http://test.com/prop&gt; rdf:type owl:Ontology .
  
  :MyType rdf:type rdfs:Datatype ;
          owl:equivalentClass [ rdf:type rdfs:Datatype ;
                                owl:onDatatype xsd:string ;
                                owl:withRestrictions ( [ xsd:pattern "[a-zA-Z]*"
                                                       ]
                                                     )
                              ] .
  
  
  #    Properties
  
  :hasProperty rdf:type owl:ObjectProperty .
  :hasValue rdf:type owl:DatatypeProperty .
  
  
  #    Classes
  
  :BaseClass rdf:type owl:Class .
  :BaseProperty rdf:type owl:Class .
  
  :MyClass rdf:type owl:Class ;
           owl:equivalentClass [ rdf:type owl:Class ;
                                 owl:intersectionOf ( :BaseClass
                                                      [ rdf:type owl:Restriction ;
                                                        owl:onProperty :hasProperty ;
                                                        owl:someValuesFrom :MyProperty
                                                      ]
                                                    )
                               ] ;
           rdfs:subClassOf :BaseClass .
  
  :MyProperty rdf:type owl:Class ;
              owl:equivalentClass [ rdf:type owl:Class ;
                                    owl:intersectionOf ( :BaseProperty
                                                         [ rdf:type owl:Restriction ;
                                                           owl:onProperty :hasValue ;
                                                           owl:someValuesFrom :MyType
                                                         ]
                                                       )
                                  ] ;
              rdfs:subClassOf :BaseProperty .
  
  
  #    Individuals
  
  :Ind1 rdf:type :BaseClass ,
                 owl:NamedIndividual ;
        :hasProperty :Prop1 .
  
  :Prop1 rdf:type :BaseProperty ,
                  owl:NamedIndividual ;
         :hasValue "Maier" .
  </code></pre>
  
  <p>The Protege crashes while classifying this ontology with Pellet reasoner:</p>
  
  <pre><code>UnsupportedOperationException: null
      com.clarkparsia.pellet.datatypes.types.text.RestrictedTextDatatype.applyConstrainingFacet(RestrictedTextDatatype.java:93)
      com.clarkparsia.pellet.datatypes.DatatypeReasonerImpl.getDataRange(DatatypeReasonerImpl.java:440)
  </code></pre>
  
  <p>The FaCT++ reasoner failed with exception:</p>
  
  <pre><code>ReasonerInternalException: Unsupported datatype 'http://test.com/prop#MyType'
  uk.ac.manchester.cs.factplusplus.FaCTPlusPlus.getBuiltInDataType(Native Method)
  </code></pre>
  
  <p>The Pellet seems only to have trouble with the pattern as a restriction. The FaCT++ seems to have trouble with a user defined datatype.</p>
  
  <p>Do I have errors in the ontology or the reasoners are not able to classify such pattern restriction?</p>