docs: protected void parseSignals() {
      for (Element signalElement : rootElement.elements("signal")) {
        String id = signalElement.attribute("id");
        String signalName = signalElement.attribute("name");
  
        for (SignalDefinition signalDefinition : signals.values()) {
          if (signalDefinition.getName().equals(signalName)) {
            addError("duplicate signal name '" + signalName + "'.", signalElement);
          }
        }
  
        if (id == null) {
          addError("signal must have an id", signalElement);
        } else if (signalName == null) {
          addError("signal with id '" + id + "' has no name", signalElement);
        } else {
          Expression signalExpression = expressionManager.createExpression(signalName);
          SignalDefinition signal = new SignalDefinition();
          signal.setId(this.targetNamespace + ":" + id);
          signal.setExpression(signalExpression);
  
          this.signals.put(signal.getId(), signal);
        }
      }
    }