It should be in the FAQ (which I am updating as we speak). The SWI-Prolog module system works differently. This applies to all Prolog systems who’s module system is based on Quintus Prolog’s module system designed in the late 80s.
In Python (and many modern languages), an import just makes the module available and you have to access the functions as module.func() or something similar. In Prolog, importing a module adds the predicates of the module to the current name space. So, after importing the metamodel, you can access its predicates as
entity(...).
To make this usable, use_module/2 allows you to import only the predicates you really use and it also allows for renaming, e.g.
:- use_module(metamodel, [entity/1 as ent]).
t :- ent(X).
The as name is a SWI-Prolog extension also seen in some other systems. The “classical” deal with a conflict is to use use_module/2, not importing the conflicting predicate from multiple places and use module:pred(....) to make the calls.
The normal way to deal with this is
Use long unique module names in the :- module(...) declaration.
Use somewhat longer names for exported predicates. In many cases the exported predicates have some abbreviation of the library name as part of their name. See the system libraries for many (mostly good, some dubious) examples.