docs: @Override 
      public List<SemanticError> check(Doc doc) {
      	logger.fine("Checking semantic constraints in document from " + doc.srcInfo);
          final List<SemanticError> errors = new ArrayList<SemanticError>();
          final Set<String> dataTypeNames = new HashSet<String>();
          for (DataType dataType : doc.dataTypes) {
              if (dataTypeNames.contains(dataType.name)) {
              	logger.info("Duplicate data type name " + dataType.name + ".");
                  errors.add(_DuplicateDataType(dataType.name));
              } else {
                  dataTypeNames.add(dataType.name);
              }
              errors.addAll(check(dataType));
          }
          return errors;
      }