@startuml


together {
	package "(rdf4j-repository-api)\nrepository"
	{
		interface Repository
		interface "Repository\nConnection" as RepositoryConnection
	}
	
	package "(rdf4j-repository-api)\nrepository.base"
	{
		class AbstractRepository
		Repository <|.. AbstractRepository
	}
}

together {
	package "(system-core)\nanswering" {
		interface OntopQueryEngine
	}

	package "(system-core)\nanswering.connection" {
		interface OntopConnection
		OntopQueryEngine .> OntopConnection: <<creates>>
	}
	
	package "(reformulation-core)\nanswering.reformulation.input" {
		interface RDF4JInputQueryFactory
	}
}


package "" as settings <<Rectangle>>
{
	package "(rdf4j)\nrdf4j.repository" #FFFFEE
	{
		interface OntopRepository {
			httpCacheHeaders: HTTPCacheHeaders
			{static} defaultRepository(\n  OntopSystemConfiguration):\n    OntopVirtualRepository
		}
		Repository <|-- OntopRepository
	}

	package "(rdf4j)\nrdf4j.repository.impl" #FFFFEE
	{
		class OntopRepositoryConnection {
			ctor(OntopRepository,\n  OntopConnection,\n  RDF4JInputQueryFactory,\n  OntopSystemSettings)
			reformulate(String): String
		}
		RepositoryConnection <|.. OntopRepositoryConnection
		OntopRepositoryConnection ..> OntopConnection
		OntopRepositoryConnection ..> RDF4JInputQueryFactory
		
		class OntopVirtualRepository {
			ctor(OntopSystemConfiguration)
		}
		OntopVirtualRepository ..> OntopQueryEngine
		OntopVirtualRepository ..> RDF4JInputQueryFactory
		OntopRepository <|.. OntopVirtualRepository
		AbstractRepository <|-- OntopVirtualRepository
		OntopVirtualRepository .> OntopRepositoryConnection: <<creates>>
	}
}


@enduml