/**
   * Returns the IRI of the resource if it has one, or else Object's toString() value. This method
   * uses the IRIMap in the currently active KnowledgeBase.
   *
   * @return the String of the resource
   */
  @Override
  public String toString() {
    Optional<IRI> iri = SemanticSystem.getActiveKnowledgeBase().getIRIMap().getIRI(this);

    String str;

    if (iri.isPresent()) {
      str = iri.get().toString();
    } else {
      str = super.toString();
    }

    return str;
  }
  /**
   * Constructs the resource with an IRI.
   *
   * @param iri the IRI for the resource
   * @throws IRIInUseException if the IRI is already in use by another resource
   * @throws NullPointerException if the argument "iri" is null
   */
  public ResourceNoAttributes(IRI iri) throws IRIInUseException, NullPointerException {
    // remaining code is in ResourceInitializationAspect

    if (iri == null) {
      throw new NullPointerException("The argument 'iri' cannot be null");
    }

    IRIMap iriMap = SemanticSystem.getIRIMap();

    if (iriMap.getResource(iri).isPresent()) {
      throw new IRIInUseException("The IRI " + iri + " is already in use.");
    }

    iriMap.setIRI(this, iri);
  }