public void visit(OWLDataRangeRestriction node) {
    try {
      lastDataTypeExpressionPointer = owlDataRange2DataTypeExpressionPointerMap.get(node);
      if (lastDataTypeExpressionPointer == null) {
        lastDataTypeExpressionPointer = null;
        lastDataTypePointer = null;
        node.getDataRange().accept(this);
        DataTypeExpressionPointer dt = getLastDataTypeExpressionPointer();

        for (OWLDataRangeFacetRestriction restriction : node.getFacetRestrictions()) {

          restriction.getFacetValue().accept(this);
          DataValuePointer dv = getLastDataValuePointer();
          DataTypeFacet facet = null;
          if (restriction.getFacet().equals(OWLRestrictedDataRangeFacetVocabulary.MIN_INCLUSIVE)) {
            facet = faCTPlusPlus.getMinInclusiveFacet(dv);
          } else if (restriction
              .getFacet()
              .equals(OWLRestrictedDataRangeFacetVocabulary.MAX_INCLUSIVE)) {
            facet = faCTPlusPlus.getMaxInclusiveFacet(dv);
          } else if (restriction
              .getFacet()
              .equals(OWLRestrictedDataRangeFacetVocabulary.MIN_EXCLUSIVE)) {
            facet = faCTPlusPlus.getMinExclusiveFacet(dv);
          } else if (restriction
              .getFacet()
              .equals(OWLRestrictedDataRangeFacetVocabulary.MAX_EXCLUSIVE)) {
            facet = faCTPlusPlus.getMaxExclusiveFacet(dv);
          } else if (restriction.getFacet().equals(OWLRestrictedDataRangeFacetVocabulary.LENGTH)) {
            facet = faCTPlusPlus.getLength(dv);
          } else if (restriction
              .getFacet()
              .equals(OWLRestrictedDataRangeFacetVocabulary.MIN_LENGTH)) {
            facet = faCTPlusPlus.getMinLength(dv);
          } else if (restriction
              .getFacet()
              .equals(OWLRestrictedDataRangeFacetVocabulary.MAX_LENGTH)) {
            facet = faCTPlusPlus.getMaxLength(dv);
          } else if (restriction
              .getFacet()
              .equals(OWLRestrictedDataRangeFacetVocabulary.FRACTION_DIGITS)) {
            facet = faCTPlusPlus.getFractionDigitsFacet(dv);
          } else if (restriction.getFacet().equals(OWLRestrictedDataRangeFacetVocabulary.PATTERN)) {
            facet = faCTPlusPlus.getPattern(dv);
          } else if (restriction
              .getFacet()
              .equals(OWLRestrictedDataRangeFacetVocabulary.TOTAL_DIGITS)) {
            facet = faCTPlusPlus.getTotalDigitsFacet(dv);
          } else {
            throw new FaCTPlusPlusReasonerException(
                "Unsupported data type facet: " + restriction.getFacet());
          }
          dt = lastDataTypeExpressionPointer = faCTPlusPlus.getRestrictedDataType(dt, facet);
        }
        owlDataRange2DataTypeExpressionPointerMap.put(node, lastDataTypeExpressionPointer);
        dataTypeExpressionPointerMap.put(lastDataTypeExpressionPointer, node);
      }
    } catch (Exception e) {
      throw new FaCTPlusPlusRuntimeException(e);
    }
  }