class KnowledgeDomain:

    """
    @parameter name the name that this domain will be addressed with, should be unique in the world
    @pre the passed name should be unique
    @post the domain is initialized, and all subsystems too
    """
    def __init__(self, name):
        self.domain = name
        self.URIIOManager = URIIOManager(self.domain)
        self.typeManager = URIIOTypeManager()
        self.predicateDefinitionManager = URIIOPredicateDefinitionManager(self.typeManager)
        self.predicateManager = URIIOPredicateManager()
        self.templateManager = TemplateManager()
        self.dataSourceManager = DataSourceManager()

    """
    @description simple helper function that allows the domain to be easily printed to the terminal
    """
    def printKnowledgeDomain(self):
        print("KnowledgeDomain " + self.domain)
        print("type hierarchy")
        self.typeManager.printTypeManager()
        print("predicates")
        self.predicateDefinitionManager.printPredicateDefinitionManager()
        print("URIIO's")
        self.URIIOManager.printURIIOManager()
 def __init__(self, name):
     self.domain = name
     self.URIIOManager = URIIOManager(self.domain)
     self.typeManager = URIIOTypeManager()
     self.predicateDefinitionManager = URIIOPredicateDefinitionManager(self.typeManager)
     self.predicateManager = URIIOPredicateManager()
     self.templateManager = TemplateManager()
     self.dataSourceManager = DataSourceManager()