Language, logic, database and protocol, all together.
With traditional programming languages, we are accustomed to writing procedural code, with function calls and structures like if-else and while. All behavior needs to be defined within this frameset. When using ES, you’re merely listing separate rules, facts like “Human is a noun”, “walk is a verb” and “A human can walk”. Of course these rules need to go together to make a cohesive logic, but you don’t need to care about execution procedure.
If you are familiar with XML parsing or relational databases, you are aware of the fact that every piece of data has to be retrieved by the program separately. With ES, data is within the code, planted into the rules you have defined.