We have some intelligence in the property shapes range calculation, to reduce the list of the classes we find: in AssignClassesVisitor, using ClassCacheProvider.
Now we should do the same to reduce the number of classes that are analyzed at the beginning of the script.
For each type T in all found types:
if T co-occurs with other types, then:
if T is a superset of all other types (it always occur with other types, and no instances of another occur without it), then:
if it is a union of all other types (no instance of T occur without a class in the other types list), then : ignore all other types (or add them as empty shapes, with a rdfs:subClassOf to T)
We have some intelligence in the property shapes range calculation, to reduce the list of the classes we find: in AssignClassesVisitor, using ClassCacheProvider.
Now we should do the same to reduce the number of classes that are analyzed at the beginning of the script.
For each type T in all found types: