How to make a query using a word within a link as WHERE

Context

I’m a newcomer to dataview and, outside using HTML twenty years ago, I have no knowledge of coding, hence the very long step-by-step description to make sure I’m making myself clear (apologies in advance)

Over the last five days, I’ve been studying the documentation (which I admit to having some trouble understanding), trying to adjust my existing workflow to its capabilities and reading lots of help posts which have indeed helped me a lot.

What I’m trying to do

I’ve got notes on animal/plant species named eg. “Corvus corax ~ corvo comum ~ common raven”

Each note has several aliases to allow for natural links eg. [Corvus corax, corvo comum, corvo, common raven, raven]

Each note for a species has got a list of fields such as:

Reino:: [[animalia]]
Filo:: [[chordata]]
Sub-Filo:: [[vertebrados]], [[craniata]]
Clade:: [[sauropsida]]
Clade:: [[avemetatarsalia]]
Clade:: [[ornithurae]]
Classe:: [[aves]]
Ordem:: [[passeriformes]]
Família:: [[corvídeos ~ crows (fam corvidae)|corvídeos]]
Género:: [[corvos e gralhas ~ ravens and crows (gén Corvus)|Corvus]]
Espécie:: Corvus corax ~ corvo comum ~ common raven

Each field has a link as its value, which directs to notes where the term is explained and then has a dataview table that works as an index of species with that value.

Originally, I intended to have a table showing:
Ordem | Família | Género | Espécie

Grouped by the first three columns, but after going through some reading, I realised it was beyond my ability and fell back on a workaround that requires only one level of grouping based on the value under a certain field.

TABLE WITHOUT ID 
Género AS Género, 
rows.file.link AS "Espécie"

FROM "Biosfera/Animais/Aves"
WHERE Espécie != null
WHERE Família = [[corvídeos ~ crows (fam corvidae)|corvídeos]]

GROUP BY Género

This works.

Género | Espécie
Corvus… | Corvus corax…
… … … … | Corvus brachyrhynchos…

But…

A lot of these filenames/links are works in progress. The scientific name is always the given, but either the English or the Portuguese common names are often added later, which causes the file name to change and the “dataview code” to break. So I need the above block to be…

NOT THIS

WHERE Família = [[corvídeos ~ crows (fam corvidae)|corvídeos]]

THIS

WHERE contains(Família, [[corvidae]])

which does not work

Things I have tried

Based on answers to other help requests and the documentation, I tried to say (what I think might be):

WHERE contains(Família, "[[corvidae]]") -> the object Família has a link with that word

Dataview: No results to show for table query

WHERE contains(Família, [["corvidae"]]) -> the object Família has that word inside a link

Dataview: No results to show for table query

WHERE contains(Família, ([[corvidae]])) -> maybe it isn't an object but a string which is a link?

Dataview: No results to show for table query

WHERE contains(Família, (corvidae)) -> maybe it isn't an object but a string (forget it's a link)

Género | Espécie
(empty) | Corvus (que é o Género, não a Espécie)

What am I missing?

Note: to the exception of very uniquely specifc words, all words on file names have small caps to avoid any problems with case sensitivity