TopicLink: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
(→Links) |
||
| (3 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
see {{Link|target=Concept:TopicLink}} | see {{Link|target=Concept:TopicLink}} | ||
https://diagrams.bitplan.com/render/png/0x6dc5850a.png | |||
[https://diagrams.bitplan.com/render/txt/0x6dc5850a.txt plantuml source] | |||
= Example = | |||
== Python example with Apache Tinkerpop compatible property graph == | |||
<source lang='python'> | |||
""" | |||
Created on 2024-11-07 | |||
@author: wf | |||
""" | |||
from mogwai.core.mogwaigraph import MogwaiGraph, MogwaiGraphConfig | |||
from mogwai.core.traversal import MogwaiGraphTraversalSource | |||
from typing import Dict, Optional | |||
import os | |||
import json | |||
from basemkit.yamlable import lod_storable | |||
class RQM: | |||
""" | |||
Requirements Management subgraph | |||
""" | |||
def __init__(self): | |||
""" | |||
constructor | |||
""" | |||
config = MogwaiGraphConfig( | |||
name_field='_node_name', | |||
index_config='minimal' | |||
) | |||
self.graph=MogwaiGraph(config=config) | |||
self.g=MogwaiGraphTraversalSource(self.graph) | |||
def create_relationships(self): | |||
"""Creates graph relationships""" | |||
self.graph.join('RQ', 'RQProfile', 'RQProfilename', 'RQProfilename', 'has_rqprofile') | |||
self.graph.join('AK', 'RQ', 'myRQ_RQid', 'RQid', 'has_rq') | |||
@classmethod | |||
def from_json(cls,root_path:str,with_join:bool=True)->'RQM': | |||
rqm=cls() | |||
for data_class,pk in [ | |||
(RQProfile,"oid"), | |||
(RQ,"oid"), | |||
(AK,"oid")]: | |||
node_name=data_class.__name__ | |||
json_path = os.path.join(root_path, f"{node_name.lower()}.json") | |||
# load JSON data | |||
with open(json_path, 'r') as json_file: | |||
data = json.load(json_file) | |||
for record in data: | |||
name=record.get(pk) | |||
non_null_props = {k: v for k, v in record.items() if v is not None} | |||
rqm.graph.add_labeled_node( | |||
node_name, | |||
name=name, | |||
properties=non_null_props | |||
) | |||
#instance=from_dict(data_class=data_class,data=record) | |||
pass | |||
if with_join: | |||
rqm.create_relationships() | |||
return rqm | |||
@lod_storable | |||
class RQProfile: | |||
oid: str | |||
RQProfilename: str | |||
RQProfileNumber: Optional[str] = None | |||
longname: Optional[str] = None | |||
comment: Optional[str] = None | |||
startdate: Optional[str] = None # isodate | |||
customer: Optional[str] = None | |||
projectNo: Optional[str] = None | |||
@lod_storable | |||
class RQ: | |||
oid: str | |||
RQid: str | |||
name: str | |||
what: str | |||
RQProfilename: Optional[str] = None | |||
RQnumber: Optional[str] = None | |||
description: Optional[str] = None | |||
why: Optional[str] = None | |||
comment: Optional[str] = None | |||
enteredOn: Optional[str] = None # isodate | |||
enteredBy: Optional[str] = None | |||
owner: Optional[str] = None | |||
priority: Optional[str] = None | |||
weight: Optional[str] = None | |||
state: Optional[str] = None | |||
kind: Optional[str] = None | |||
design: Optional[int] = None #bool | |||
negative: Optional[int] = None #bool | |||
basedOn: Optional[str] = None | |||
qualityAcceptance: Optional[str] = None | |||
myRQProfile_RQProfilename: Optional[str] = None | |||
myReport_ReportId: Optional[str] = None | |||
@lod_storable | |||
class AK: | |||
oid: str | |||
AKid: str | |||
name: str | |||
situation: str | |||
action: str | |||
expectedResult: str | |||
RQProfilename: Optional[str] = None | |||
RQnumber: Optional[str] = None | |||
RQname: Optional[str] = None | |||
AKnumber: Optional[str] = None | |||
project: Optional[str] = None | |||
description: Optional[str] = None | |||
manualOnly: Optional[int] = None #bool | |||
comment: Optional[str] = None | |||
enteredBy: Optional[str] = None | |||
enteredOn: Optional[str] = None# isodate | |||
owner: Optional[str] = None | |||
qualityAcceptance: Optional[str] = None | |||
state: Optional[str] = None | |||
rejection: Optional[int] = None #bool | |||
disabled: Optional[int] = None #bool | |||
done: Optional[int] = None #bool | |||
doneDate: Optional[str] = None # isodate | |||
difficulty: Optional[str] = None | |||
acceptance: Optional[str] = None | |||
accDate: Optional[str] = None # isodate | |||
responsible: Optional[str] = None | |||
myRQ_RQid: Optional[str] = None | |||
</source> | |||
= Links = | = Links = | ||
* https://en.wikipedia.org/wiki/Property_graph | * https://en.wikipedia.org/wiki/Property_graph | ||
* {{Link|target=NSGI-LD}} | |||
Latest revision as of 08:13, 9 July 2025
https://diagrams.bitplan.com/render/png/0x6dc5850a.png
Example
Python example with Apache Tinkerpop compatible property graph
"""
Created on 2024-11-07
@author: wf
"""
from mogwai.core.mogwaigraph import MogwaiGraph, MogwaiGraphConfig
from mogwai.core.traversal import MogwaiGraphTraversalSource
from typing import Dict, Optional
import os
import json
from basemkit.yamlable import lod_storable
class RQM:
"""
Requirements Management subgraph
"""
def __init__(self):
"""
constructor
"""
config = MogwaiGraphConfig(
name_field='_node_name',
index_config='minimal'
)
self.graph=MogwaiGraph(config=config)
self.g=MogwaiGraphTraversalSource(self.graph)
def create_relationships(self):
"""Creates graph relationships"""
self.graph.join('RQ', 'RQProfile', 'RQProfilename', 'RQProfilename', 'has_rqprofile')
self.graph.join('AK', 'RQ', 'myRQ_RQid', 'RQid', 'has_rq')
@classmethod
def from_json(cls,root_path:str,with_join:bool=True)->'RQM':
rqm=cls()
for data_class,pk in [
(RQProfile,"oid"),
(RQ,"oid"),
(AK,"oid")]:
node_name=data_class.__name__
json_path = os.path.join(root_path, f"{node_name.lower()}.json")
# load JSON data
with open(json_path, 'r') as json_file:
data = json.load(json_file)
for record in data:
name=record.get(pk)
non_null_props = {k: v for k, v in record.items() if v is not None}
rqm.graph.add_labeled_node(
node_name,
name=name,
properties=non_null_props
)
#instance=from_dict(data_class=data_class,data=record)
pass
if with_join:
rqm.create_relationships()
return rqm
@lod_storable
class RQProfile:
oid: str
RQProfilename: str
RQProfileNumber: Optional[str] = None
longname: Optional[str] = None
comment: Optional[str] = None
startdate: Optional[str] = None # isodate
customer: Optional[str] = None
projectNo: Optional[str] = None
@lod_storable
class RQ:
oid: str
RQid: str
name: str
what: str
RQProfilename: Optional[str] = None
RQnumber: Optional[str] = None
description: Optional[str] = None
why: Optional[str] = None
comment: Optional[str] = None
enteredOn: Optional[str] = None # isodate
enteredBy: Optional[str] = None
owner: Optional[str] = None
priority: Optional[str] = None
weight: Optional[str] = None
state: Optional[str] = None
kind: Optional[str] = None
design: Optional[int] = None #bool
negative: Optional[int] = None #bool
basedOn: Optional[str] = None
qualityAcceptance: Optional[str] = None
myRQProfile_RQProfilename: Optional[str] = None
myReport_ReportId: Optional[str] = None
@lod_storable
class AK:
oid: str
AKid: str
name: str
situation: str
action: str
expectedResult: str
RQProfilename: Optional[str] = None
RQnumber: Optional[str] = None
RQname: Optional[str] = None
AKnumber: Optional[str] = None
project: Optional[str] = None
description: Optional[str] = None
manualOnly: Optional[int] = None #bool
comment: Optional[str] = None
enteredBy: Optional[str] = None
enteredOn: Optional[str] = None# isodate
owner: Optional[str] = None
qualityAcceptance: Optional[str] = None
state: Optional[str] = None
rejection: Optional[int] = None #bool
disabled: Optional[int] = None #bool
done: Optional[int] = None #bool
doneDate: Optional[str] = None # isodate
difficulty: Optional[str] = None
acceptance: Optional[str] = None
accDate: Optional[str] = None # isodate
responsible: Optional[str] = None
myRQ_RQid: Optional[str] = None