Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
R
Requirement Formalization Tool
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Thodoris Nestoridis
Requirement Formalization Tool
Commits
bf1b8fb5
Commit
bf1b8fb5
authored
Jan 26, 2021
by
Thodoris Nestoridis
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
export data from Ontology file
parent
f2622a8f
Changes
6
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
943 additions
and
68 deletions
+943
-68
example.ttl
reqtool/Ontologies/example.ttl
+30
-1
s-get
reqtool/Ontologies/s-get
+725
-0
main_req.py
reqtool/reqman/api/reqman/apps/reqtool/models/main_req.py
+16
-9
suffix_req.py
reqtool/reqman/api/reqman/apps/reqtool/models/suffix_req.py
+5
-1
parse_ontologies.py
...reqman/apps/reqtool/rest_api/services/parse_ontologies.py
+80
-26
dict_RBO.py
reqtool/test_scripts/dict_RBO.py
+87
-31
No files found.
reqtool/Ontologies/example.ttl
View file @
bf1b8fb5
...
...
@@ -32,4 +32,33 @@ SAO:belongsTo a owl:InverseFunctionalProperty ;
rdfs:
range
SAO:
StateSet
.
DSO-AOCS-instances:
Enable_Disable_State
a
SAO:
StateSet
.
\ No newline at end of file
a
SAO:
StateSet
.
RMO:
belongsTo
a
owl:
ObjectProperty
;
rdfs:
domain
RMO:
State
;
rdfs:
range
RMO:
StateSet
.
RMO:
contains
a
owl:
ObjectProperty
;
rdfs:
domain
RMO:
Function
;
rdfs:
range
RMO:
Function
.
RMO:
generates
a
owl:
ObjectProperty
;
rdfs:
domain
RMO:
Function
;
rdfs:
range
RMO:
Flow
.
RMO:
invokes
a
owl:
ObjectProperty
;
rdfs:
domain
RMO:
Function
;
rdfs:
range
RMO:
Function
.
RMO:
performs
a
owl:
ObjectProperty
;
rdfs:
domain
RMO:
System
;
rdfs:
range
RMO:
Function
.
RMO:
sets
a
owl:
ObjectProperty
;
rdfs:
domain
RMO:
Flow
;
rdfs:
range
RMO:
State
.
:
mode
rdf:
type
SAO:
State
;
SAO:
hasSubState
:
submode
;
SAO:
takesValuesFrom
:
aocs_modes
;
\ No newline at end of file
reqtool/Ontologies/s-get
0 → 100755
View file @
bf1b8fb5
This diff is collapsed.
Click to expand it.
reqtool/reqman/api/reqman/apps/reqtool/models/main_req.py
View file @
bf1b8fb5
...
...
@@ -27,20 +27,27 @@ MAIN_CHOICES = ( ("",""), ("M1", "M1 : system/function shall [not] set [<quant
#to be updated with domains from DSO
#SYSTEM_CHOICES = (("SYSTEM", "SYSTEM"), ("SYSTEM2", "SYSTEM2"))
SYSTEM_CHOICES
=
find_extra_keywords
(
"SAO:System"
)
FUNCTION_CHOICES
=
((
"FUNCTION"
,
"FUNCTION"
),
(
"FUNCTION2"
,
"FUNCTION2"
))
SYSTEM_CHOICES
=
find_extra_keywords
(
"SAO:System"
,
1
)
#FUNCTION_CHOICES = (("FUNCTION", "FUNCTION"), ("FUNCTION2", "FUNCTION2"))
FUNCTION_CHOICES
=
find_extra_keywords
(
":Function"
,
1
)
+
find_extra_keywords
(
":Function"
,
2
)
SHALL_CHOICES
=
(
(
"shall"
,
"SHALL"
),
(
"shall not"
,
"SHALL NOT"
))
QUANTIFIER_CHOICES
=
(
(
"none"
,
"NONE"
),
(
"all"
,
"ALL"
),
(
"only"
,
"ONLY"
),
(
"more than"
,
"MORE THAN"
),
(
"less than"
,
"LESS THAN"
),
(
"exactly"
,
"EXACTLY"
),
(
"at least"
,
"AT LEAST"
),
(
"at most"
,
"AT MOST"
)
)
NUMBER_UNITS_CHOICES
=
((
""
,
""
),
(
"meters"
,
"METERS"
),
(
"kilometers"
,
"KILOMETERS"
),
(
"volt"
,
"VOLT"
))
ITEM_CHOICES
=
((
"ITEM"
,
"ITEM"
),
(
"ITEM2"
,
"ITEM2"
)
)
STATE_CHOICES
=
((
"state"
,
"STATE"
),
(
"state2"
,
"STATE2"
))
STATE_VALUE_CHOICES
=
((
"enabled"
,
"ENABLED"
),
(
"disabled"
,
"DISABLED"
))
FLOW_CHOICES
=
((
"flow"
,
"FLOW"
),
(
"flow2"
,
"FLOW2"
))
INTERFACE_CHOICES
=
((
"interface"
,
"INTERFACE"
),
(
"interface2"
,
"INTERFACE2"
))
CONNECTION_CHOICES
=
((
"connection"
,
"CONNECTION"
),
(
"connection2"
,
"CONNECTION2"
))
#ITEM_CHOICES = (("ITEM", "ITEM"), ("ITEM2", "ITEM2") )
ITEM_CHOICES
=
find_extra_keywords
(
"SAO:Item"
,
1
)
#STATE_VALUE_CHOICES = (("enabled", "ENABLED"), ("disabled", "DISABLED"))
STATE_VALUE_CHOICES
=
find_extra_keywords
(
":StateValue"
,
2
)
#STATE_CHOICES = (("state", "STATE"), ("state2", "STATE2"))
STATE_CHOICES
=
[
x
for
x
in
find_extra_keywords
(
":State"
,
2
)
if
x
not
in
STATE_VALUE_CHOICES
]
#FLOW_CHOICES = (("flow","FLOW"), ("flow2","FLOW2"))
FLOW_CHOICES
=
find_extra_keywords
(
":Flow"
,
3
)
#INTERFACE_CHOICES = (("interface","INTERFACE"), ("interface2","INTERFACE2"))
INTERFACE_CHOICES
=
find_extra_keywords
(
":Interface"
,
2
)
#CONNECTION_CHOICES = (("connection","CONNECTION"), ("connection2","CONNECTION2"))
CONNECTION_CHOICES
=
find_extra_keywords
(
":Connection"
,
2
)
SYSTEM_INTERFACE_CHOICES
=
SYSTEM_CHOICES
+
INTERFACE_CHOICES
FLOW_ITEM_CHOICES
=
FLOW_CHOICES
+
ITEM_CHOICES
SYSTEM_OR_FUNCTION_CHOICES
=
SYSTEM_CHOICES
+
FUNCTION_CHOICES
...
...
@@ -384,7 +391,7 @@ class Main_M2(models.Model):
main_owner_of_m2
=
models
.
ForeignKey
(
Main
,
related_name
=
'main_owner_of_M2'
,
on_delete
=
models
.
CASCADE
)
sys_fun_m2
=
models
.
CharField
(
choices
=
SYSTEM_OR_FUNCTION_CHOICES
,
max_length
=
100
)
shall_m2
=
models
.
CharField
(
choices
=
SHALL_CHOICES
,
max_length
=
100
)
state_m2
=
models
.
CharField
(
default
=
' '
,
max_length
=
100
)
state_m2
=
models
.
CharField
(
choices
=
STATE_CHOICES
,
max_length
=
100
)
statevalue_m2
=
models
.
CharField
(
choices
=
STATE_VALUE_CHOICES
,
max_length
=
100
)
...
...
reqtool/reqman/api/reqman/apps/reqtool/models/suffix_req.py
View file @
bf1b8fb5
...
...
@@ -4,6 +4,9 @@ from reqman.apps.account.models import User
from
pygments.formatters.html
import
HtmlFormatter
from
pygments
import
highlight
from
reqman.apps.reqtool.rest_api.services.parse_ontologies
import
*
SUFFIX_CHOICES
=
((
""
,
""
),
(
'S1'
,
'S1: <numerical-armative> j <closed-interval> [per <time-unit>]'
),
(
'S2'
,
'S2: after/before flow'
),
(
'S3'
,
'S3: [every/for a period of/within/for at least] <number> <time-unit> [from flow]'
),
...
...
@@ -15,7 +18,8 @@ NUMERICAL_AFFIRMATIVE_CHOICES = (("", ""), ("more than", "MORE THAN"), ("less th
(
"at least"
,
"AT LEAST"
),
(
"at most"
,
"AT MOST"
))
NUMBER_UNITS_CHOICES
=
((
""
,
""
),
(
"meters"
,
"METERS"
),
(
"kilometers"
,
"KILOMETERS"
),
(
"volt"
,
"VOLT"
))
TIME_UNITS_CHOICES
=
((
""
,
""
),
(
"seconds"
,
"SECONDS"
),
(
"minutes"
,
"MINUTES"
),
(
"milliseconds"
,
"MILLISECONDS"
))
FLOW_CHOICES
=
((
"flow"
,
"FLOW"
),
(
"flow2"
,
"FLOW2"
))
#FLOW_CHOICES = (("flow","FLOW"), ("flow2","FLOW2"))
FLOW_CHOICES
=
find_extra_keywords
(
":Flow"
,
3
)
S2_CHOICES
=
((
"before"
,
"BEFORE"
),
(
"after"
,
"AFTER"
))
S3_CHOICES
=
((
"every"
,
"EVERY"
),
(
"for a period of"
,
"FOR A PERIOD OF"
),
(
"within"
,
"WITHIN"
),
(
"for at least"
,
"FOR AT LEAST"
))
S4_CHOICES
=
((
"at the beginning"
,
"AT THE BEGINNING"
),
(
"at the end"
,
"AT THE END"
))
...
...
reqtool/reqman/api/reqman/apps/reqtool/rest_api/services/parse_ontologies.py
View file @
bf1b8fb5
IS_SAO_SYSTEM
=
"SAO:System"
#from subprocess import call
#call("./../../Ontologies/s-get http://155.207.131.19:3030/Mokos_18_1_7_47/data default >> ../../Ontologies/data.ttl", shell=True)
Ontology_file
=
"../../Ontologies/Mokos_18_1_7_47.ttl"
list_of_DSO
=
[
"DSO"
,
"DSO-AOCS"
,
"DSO-AOCS-instances"
]
list_of_RMO
=
[
"RMO"
,
"RMO-instances"
,
"DSO-AOCS-instances"
]
'''Return the Systems from the Ontologies'''
'''Return the Systems
and Items
from the Ontologies'''
def
get_keyword
(
keyword
):
system_list
=
[]
with
open
(
"../../Ontologies/Mokos_18_1_7_47.ttl"
)
as
f
:
for
dso
in
list_of_DSO
:
flag_1
,
flag_2
=
0
,
0
for
dso
in
list_of_DSO
:
flag_1
,
flag_2
=
0
,
0
with
open
(
Ontology_file
)
as
f
:
for
line
in
f
:
if
line
.
startswith
(
dso
):
spliter_1
=
line
.
split
(
':'
)
spliter_2
=
spliter_1
[
1
]
.
split
(
' '
)
key
=
spliter_2
[
0
]
.
strip
()
flag_1
=
1
if
flag_1
==
1
:
if
':'
in
keyword
:
if
keyword
in
line
and
(
"subClassOf"
in
line
)
and
not
(
':comment'
in
line
or
'disjointWith'
in
line
or
'construct'
in
line
or
'label'
in
line
)
:
flag_2
=
1
elif
not
':'
in
keyword
:
keyword
=
':'
+
keyword
if
keyword
in
line
and
(
"subClassOf"
in
line
)
and
not
(
':comment'
in
line
or
'disjointWith'
in
line
or
'construct'
in
line
or
'label'
in
line
)
:
flag_2
=
1
if
flag_1
==
1
and
flag_2
==
1
:
if
(
line
.
strip
())
.
endswith
(
'.'
):
if
not
key
in
system_list
:
system_list
.
append
(
key
)
flag_1
,
flag_2
=
0
,
0
if
(
line
.
strip
())
.
endswith
(
'.'
)
and
not
((
line
.
strip
())
.
startswith
(
'-'
)
or
(
':comment'
in
line
))
:
flag_1
,
flag_2
=
0
,
0
return
system_list
#tuple((str(n), str(n)) for n in system_list)
'''Return the Flow, State, Interface, Connection from the Ontologies'''
def
get_keyword_2
(
keyword
):
system_list
=
[]
for
dso
in
list_of_RMO
:
flag_1
,
flag_2
=
0
,
0
with
open
(
Ontology_file
)
as
f
:
for
line
in
f
:
if
line
.
startswith
(
dso
):
spliter_1
=
line
.
split
(
':'
)
...
...
@@ -17,34 +52,53 @@ def get_keyword(keyword):
flag_1
=
1
if
flag_1
==
1
:
if
':'
in
keyword
:
if
keyword
in
line
and
"subClassOf"
in
line
:
if
keyword
in
line
and
(
"domain"
in
line
or
"range"
in
line
or
"a"
in
line
)
and
not
(
':comment'
in
line
or
'disjointWith'
in
line
or
'construct'
in
line
or
'label'
in
line
)
:
flag_2
=
1
elif
not
':'
in
keyword
:
keyword
=
':'
+
keyword
if
keyword
in
line
and
"subClassOf"
in
line
:
if
keyword
in
line
and
(
"domain"
in
line
or
"range"
in
line
or
"a"
in
line
)
and
not
(
':comment'
in
line
or
'disjointWith'
in
line
or
'construct'
in
line
or
'label'
in
line
)
:
flag_2
=
1
if
flag_1
==
1
and
flag_2
==
1
:
if
(
line
.
strip
())
.
endswith
(
'.'
):
if
not
key
in
system_list
:
system_list
.
append
(
key
)
flag_1
,
flag_2
=
0
,
0
if
(
line
.
strip
())
.
endswith
(
'.'
)
and
not
((
line
.
strip
())
.
startswith
(
'-'
)
or
(
line
.
strip
())
.
startswith
(
'rdfs:comment'
))
:
if
(
line
.
strip
())
.
endswith
(
'.'
)
and
not
((
line
.
strip
())
.
startswith
(
'-'
)
or
(
':comment'
in
line
))
:
flag_1
,
flag_2
=
0
,
0
return
system_list
def
find_extra_keywords
(
keyword
):
first_search
=
get_keyword
(
keyword
)
second_search
=
first_search
.
copy
()
for
i
in
first_search
:
k
=
get_keyword
(
i
)
for
kl
in
k
:
if
not
kl
in
second_search
:
second_search
.
append
(
kl
)
third_search
=
second_search
.
copy
()
for
i
in
second_search
:
k
=
get_keyword
(
i
)
for
kl
in
k
:
if
not
kl
in
third_search
:
third_search
.
append
(
kl
)
return
tuple
((
str
(
n
),
str
(
n
))
for
n
in
third_search
)
\ No newline at end of file
return
system_list
#tuple((str(n), str(n)) for n in system_list)
def
find_extra_keywords
(
keyword
,
choice
):
third_search
=
[]
if
choice
==
1
:
first_search
=
get_keyword
(
keyword
)
second_search
=
first_search
.
copy
()
for
i
in
first_search
:
k
=
get_keyword
(
i
)
for
kl
in
k
:
if
not
kl
in
second_search
:
second_search
.
append
(
kl
)
third_search
=
second_search
.
copy
()
for
i
in
second_search
:
k
=
get_keyword
(
i
)
for
kl
in
k
:
if
not
kl
in
third_search
:
third_search
.
append
(
kl
)
if
choice
==
2
:
first_search
=
get_keyword_2
(
keyword
)
second_search
=
first_search
.
copy
()
for
i
in
first_search
:
k
=
get_keyword_2
(
i
)
for
kl
in
k
:
if
not
kl
in
second_search
:
second_search
.
append
(
kl
)
third_search
=
second_search
.
copy
()
for
i
in
second_search
:
k
=
get_keyword_2
(
i
)
for
kl
in
k
:
if
not
kl
in
third_search
:
third_search
.
append
(
kl
)
if
choice
==
3
:
third_search
=
get_keyword_2
(
keyword
)
return
tuple
((
str
(
n
),
str
(
n
))
for
n
in
third_search
)
reqtool/test_scripts/dict_RBO.py
View file @
bf1b8fb5
IS_SAO_SYSTEM
=
":
Interface
"
IS_SAO_SYSTEM
=
":
Flow
"
list_of_DSO
=
[
"DSO"
,
"DSO-AOCS"
,
"DSO-AOCS-instances"
]
list_of_RMO
=
[
"RMO"
,
"RMO-instances"
,
"DSO-AOCS-instances"
,
"SAO"
]
'''Return the Systems from the Ontologies'''
'''Return the Systems
and Items
from the Ontologies'''
def
get_keyword
(
keyword
):
system_list
=
[]
with
open
(
"../Ontologies/Mokos_18_1_7_47.ttl"
)
as
f
:
for
dso
in
list_of_DSO
:
flag_1
,
flag_2
=
0
,
0
for
dso
in
list_of_DSO
:
flag_1
,
flag_2
=
0
,
0
with
open
(
"../Ontologies/Mokos_18_1_7_47.ttl"
)
as
f
:
for
line
in
f
:
if
line
.
startswith
(
dso
):
spliter_1
=
line
.
split
(
':'
)
spliter_2
=
spliter_1
[
1
]
.
split
(
' '
)
key
=
spliter_2
[
0
]
.
strip
()
flag_1
=
1
if
flag_1
==
1
:
if
':'
in
keyword
:
if
keyword
in
line
and
(
"subClassOf"
in
line
)
and
not
(
':comment'
in
line
or
'disjointWith'
in
line
or
'construct'
in
line
or
'label'
in
line
)
:
flag_2
=
1
elif
not
':'
in
keyword
:
keyword
=
':'
+
keyword
if
keyword
in
line
and
(
"subClassOf"
in
line
)
and
not
(
':comment'
in
line
or
'disjointWith'
in
line
or
'construct'
in
line
or
'label'
in
line
)
:
flag_2
=
1
if
flag_1
==
1
and
flag_2
==
1
:
if
(
line
.
strip
())
.
endswith
(
'.'
):
if
not
key
in
system_list
:
system_list
.
append
(
key
)
flag_1
,
flag_2
=
0
,
0
if
(
line
.
strip
())
.
endswith
(
'.'
)
and
not
((
line
.
strip
())
.
startswith
(
'-'
)
or
(
line
.
strip
())
.
startswith
(
':comment'
))
:
flag_1
,
flag_2
=
0
,
0
return
system_list
#tuple((str(n), str(n)) for n in system_list)
'''Return the Flow, from the Ontologies'''
def
get_keyword_2
(
keyword
):
system_list
=
[]
for
dso
in
list_of_RMO
:
flag_1
,
flag_2
=
0
,
0
with
open
(
"../Ontologies/Mokos_18_1_7_47.ttl"
)
as
f
:
for
line
in
f
:
if
line
.
startswith
(
dso
):
spliter_1
=
line
.
split
(
':'
)
...
...
@@ -17,43 +48,68 @@ def get_keyword(keyword):
flag_1
=
1
if
flag_1
==
1
:
if
':'
in
keyword
:
if
keyword
in
line
and
"subClassOf"
in
line
:
if
keyword
in
line
and
(
"domain"
in
line
or
"range"
in
line
or
"a"
in
line
)
and
not
(
':comment'
in
line
or
'disjointWith'
in
line
or
'construct'
in
line
or
'label'
in
line
)
:
flag_2
=
1
elif
not
':'
in
keyword
:
keyword
=
':'
+
keyword
if
keyword
in
line
and
"subClassOf"
in
line
:
if
keyword
in
line
and
(
"domain"
in
line
or
"range"
in
line
or
"a"
in
line
)
and
not
(
':comment'
in
line
or
'disjointWith'
in
line
or
'construct'
in
line
or
'label'
in
line
)
:
flag_2
=
1
if
flag_1
==
1
and
flag_2
==
1
:
if
(
line
.
strip
())
.
endswith
(
'.'
):
if
not
key
in
system_list
:
system_list
.
append
(
key
)
flag_1
,
flag_2
=
0
,
0
if
(
line
.
strip
())
.
endswith
(
'.'
)
and
not
((
line
.
strip
())
.
startswith
(
'-'
)
or
(
line
.
strip
())
.
startswith
(
'
rdfs
:comment'
))
:
if
(
line
.
strip
())
.
endswith
(
'.'
)
and
not
((
line
.
strip
())
.
startswith
(
'-'
)
or
(
line
.
strip
())
.
startswith
(
':comment'
))
:
flag_1
,
flag_2
=
0
,
0
return
system_list
#tuple((str(n), str(n)) for n in system_list)
def
find_extra_keywords
(
keyword
):
first_search
=
get_keyword
(
keyword
)
second_search
=
first_search
.
copy
()
for
i
in
first_search
:
k
=
get_keyword
(
i
)
print
(
i
)
print
(
k
)
for
kl
in
k
:
if
not
kl
in
second_search
:
second_search
.
append
(
kl
)
third_search
=
second_search
.
copy
()
for
i
in
second_search
:
k
=
get_keyword
(
i
)
print
(
i
)
print
(
k
)
for
kl
in
k
:
if
not
kl
in
third_search
:
third_search
.
append
(
kl
)
return
system_list
#tuple((str(n), str(n)) for n in system_list)
def
find_extra_keywords
(
keyword
,
choice
):
third_search
=
[]
if
choice
==
1
:
first_search
=
get_keyword
(
keyword
)
second_search
=
first_search
.
copy
()
for
i
in
first_search
:
k
=
get_keyword
(
i
)
#print(i)
#print(k)
for
kl
in
k
:
if
not
kl
in
second_search
:
second_search
.
append
(
kl
)
third_search
=
second_search
.
copy
()
for
i
in
second_search
:
k
=
get_keyword
(
i
)
#print(i)
#print(k)
for
kl
in
k
:
if
not
kl
in
third_search
:
third_search
.
append
(
kl
)
if
choice
==
2
:
first_search
=
get_keyword_2
(
keyword
)
second_search
=
first_search
.
copy
()
for
i
in
first_search
:
k
=
get_keyword_2
(
i
)
#print(i)
#print(k)
for
kl
in
k
:
if
not
kl
in
second_search
:
second_search
.
append
(
kl
)
third_search
=
second_search
.
copy
()
for
i
in
second_search
:
k
=
get_keyword_2
(
i
)
#print(i)
#print(k)
for
kl
in
k
:
if
not
kl
in
third_search
:
third_search
.
append
(
kl
)
return
tuple
((
str
(
n
),
str
(
n
))
for
n
in
third_search
)
print
(
find_extra_keywords
(
IS_SAO_SYSTEM
))
print
(
get_keyword
(
IS_SAO_SYSTEM
))
\ No newline at end of file
#print(len(find_extra_keywords(IS_SAO_SYSTEM, 2)))
STATE_VALUE_CHOICES
=
find_extra_keywords
(
":StateValue"
,
2
)
new
=
[
x
for
x
in
find_extra_keywords
(
":State"
,
2
)
if
x
not
in
STATE_VALUE_CHOICES
]
print
(
"this is"
,
new
)
#print(get_keyword_2(IS_SAO_SYSTEM))
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment