WolfgangFahl / snapquery

Frontend to Introduce Named Queries and Named Query Middleware to wikidata
Apache License 2.0
4 stars 1 forks source link

add puml / UML description to readme #34

Open WolfgangFahl opened 1 week ago

WolfgangFahl commented 1 week ago

e.g. Query, Parameters, Graph, Endpoint and other most relevant domain elements. Optionally create a technical view mapping these concepts to the implementation details such as python, SPARQL, SQL and yaml with links to the definitions. Therefore e.g. a DDL derived from the current SQLIte implementation makes sense and maybe a LinkML description.

tholzheim commented 6 days ago

Current data model:

classDiagram
namespace snapquery{
    class QueryStatsList {
        name: string [opt]
    }
    class QueryStats {
        stats_id: string [req]
        query_id: string [req]
        endpoint_name: string [req]
        context: string [opt]
        records: integer [opt]
        time_stamp: time [opt]
        duration: float [opt]
        error_msg: string [opt]
        filtered_msg: string [opt]
    }
class QueryDetails {
     query_id: string [req]
     params: string [req]
     params_count: integer [req]
     lines: integer [req]
     size: integer [req]
}
class QueryBundle

class NamedQuery {
     query_id: string [req]
     namespace: string [req]
     name: string [req]
     sparql: string [opt]
     url: string [opt]
     title: string [opt]
     description: string [opt]
     comment: string [opt]
}

class NamedQueryManager {
     sql_db: string [opt]
     samples_path: string [opt]
     primary_keys: string [opt]
     entity_infos: string [opt]
}
class NamedQueryList {
     name: string [opt]
}
}

QueryStatsList --> "0..*" QueryStats : stats

QueryBundle *--> "0..1" Endpoint : endpoint
QueryBundle *--> "0..1" Query : query
QueryBundle --> "0..1" NamedQuery : named_query

NamedQueryManager *--> "0..*" Endpoint : endpoints

NamedQueryList --> "0..*" NamedQuery : queries

namespace lodstorage {

    class Query {
        name: string [req]
        query: string [req]
        lang: string [opt]
        endpoint: string [opt]
        database: string [opt]
        title: string [opt]
        description: string [opt]
        limit: integer [opt]
        prefixes: string [opt]
        tryItUrl: string [opt]
        formats: string [opt]
    }

    class Endpoint {
        name: string [req]
        lang: string [req]
        endpoint: uri [req]
        website: uri [opt]
        database: string [opt]
        method: string [opt]
        prefixes: string [opt]
        auth: string [opt]
        user: string [opt]
        password: string [opt]
    }

    class Params {
        illegal_chars: string [opt]
        query: string [opt]
        pattern: string [opt]
        params: string [opt]
        params_dict: string [opt]
        has_params: boolean [opt]
    }
}