@startuml

class ObservationKeeper{
    - simpleValues: Map<string,Map<string,Array<Observation>>>
    - featureOfInterests: Map<String,FeatureOfInterest>
    - createNewSimpleValue(idSimpleValue:string):void
    - createNewLocationID(idSimpleValue:string,idLocation:string):void
    + addSimpleValue(idSimpleValue:string,idLocation:string,simpleValue:Observation)
    + addFeatureOfInterest(feature:FeatureOfInterest)
}

class FeatureOfInterest{
    - longitude:number
    - latitude:number
    - id: string

    +getLongitude():number
    +getLatitude():number
    +getId():string
}

class Observation{
    - timestamp:Date
    - value: number
}

interface ISource{
    +getData():Promise<Obseration[]>
    +getPage(id:any):Page
}

abstract ASource implements ISource{
    - keeperOfTheObservations:ObservationKeeper
    +schrijfWeg():void
    +controleerGrootte():void
    +createPage():Page
    + publishData()
}

class Page{
    - triples: RDF.Quad[]
    - metadata: RDF.Quad[]
    + getMetadata():RDF.Quad[]
    + getTriples():RDF.Quad[]

}

class BlueBikeExample extends ASource{
}

Observation - ObservationKeeper
ObservationKeeper -- FeatureOfInterest
ObservationKeeper - ASource
ASource - Page

@enduml