Declarative, functional, imperative, stack-based, array-based, etc is a description of the language itself, or rather the primary computational abstraction; DSL is a description of its usecase and purpose. The opposite is a general-purpose language. The two concepts are orthogonal.
For example, your Wikipedia page defines regexes as also a declarative language, and yet it is also the quintessential DSL.
And in terms of it's domain... SQL has a very a restricted domain it was meant for, and is generally used for. You could argue its domain has expanded slightly with things like LINQ, but it's clearly wrong to describe it as an alternative to say python, or c#, as a language, in purpose or usage.
Declarative, functional, imperative, stack-based, array-based, etc is a description of the language itself, or rather the primary computational abstraction; DSL is a description of its usecase and purpose. The opposite is a general-purpose language. The two concepts are orthogonal.
For example, your Wikipedia page defines regexes as also a declarative language, and yet it is also the quintessential DSL.
And in terms of it's domain... SQL has a very a restricted domain it was meant for, and is generally used for. You could argue its domain has expanded slightly with things like LINQ, but it's clearly wrong to describe it as an alternative to say python, or c#, as a language, in purpose or usage.
a language being a DPL doesn't preclude it from being a DSL
I’m not certain that is true.
With a DPL, you describe what output you want without describing how to produce the output.
With a DSL, you have to describe how to produce the output.
No, there is no requirement that a DSL be imperative rather than declarative.