class DMNModelRepository {

    public List<DRGElementReference<TInvocable>> directSubInvocables(TDRGElement element) {
        List<DRGElementReference<TInvocable>> result = new ArrayList<>();
        // Add reference for direct children
        List<TKnowledgeRequirement> knowledgeRequirements = knowledgeRequirements(element);
        for (TKnowledgeRequirement kr : knowledgeRequirements) {
            TDMNElementReference reference = kr.getRequiredKnowledge();
            if (reference != null) {
                TInvocable invocable = findInvocableByRef(element, reference.getHref());
                if (invocable != null) {
                    String importName = findImportName(element, reference);
                    result.add(makeDRGElementReference(importName, invocable));
                } else {
                    throw new DMNRuntimeException(String.format("Cannot find Invocable for '%s'", reference.getHref()));
                }
            }
        }
        return result;
    }

    public  DMNModelRepository();
    public  DMNModelRepository(TDefinitions definitions, PrefixNamespaceMappings prefixNamespaceMappings);
    public  DMNModelRepository(Pair<TDefinitions, PrefixNamespaceMappings> pair);
    public  DMNModelRepository(List<Pair<TDefinitions, PrefixNamespaceMappings>> pairList);

}