немножко больше

Mar 03, 2013 22:54


Чуть менее мелкая программка на Python, которая при исполнении в консоли редактора...

# ko4evnik 2013-03-03

#...старое...
import re
import iso15926.kb as kb

outfile = file('15926_to_graphvize.dot', 'w')
outfile.write('digraph graph15926entities{\nrankdir=LR\nnode[shape=box]\n')

entities=sorted(kb.part2_itself)

regex = re.compile('part2:')

for entity in entities:
name = regex.sub('',entity)
outfile.write(name+' [label="'+name+'"]\n')

#...добавление 2013-03-03: списки ролей у сущностей

outfile.write('\nnode[shape=ellipse]\n')

for entity in entities:
roles = kb.part2_itself[entity]['roles']
if len(roles) > 0:
name_entity = regex.sub('',entity)
for role in roles:
name_role = regex.sub('',role)
outfile.write(name_entity+'_'+name_role + ' [label="'+name_role+'"]\n')

#...добавление 2013-03-03: кластеры из сущностей и их ролей

for entity in entities:
roles = kb.part2_itself[entity]['roles']
if len(roles) > 0:
name_entity = regex.sub('',entity)

outfile.write('\n\nsubgraph cluster_'+ name_entity + ' { {rank=same;\n' + name_entity + ';')
for role in roles:
name_role = regex.sub('',role)
outfile.write('\n' + name_entity+'_'+name_role +';' )

outfile.write('\n}}')

#...добавление 2013-03-03: связи между ролями и типами сущностей

outfile.write('\nedge[style=bold,color=lightgrey,arrowhead=none]\n')

for entity in entities:

roles = kb.part2_itself[entity]['roles']
if len(roles) > 0:
name_entity = regex.sub('',entity)

for role_as_list in roles.items():
name_role = regex.sub('',role_as_list[1]['name'])
if role_as_list[1]['is_literal'] == False:
name_type = regex.sub('',role_as_list[1]['type_uri'])
outfile.write('\n' + name_entity+'_'+name_role +' -> ' + name_type )

#...старое...
outfile.write('\nedge[style=filled,color=black,arrowhead=dot]\n')

for entity in entities:
superclasses = kb.part2_itself[entity]['supertypes']
name_entity = regex.sub('',entity)
for superclass in superclasses:
name_superclass = regex.sub('',superclass )
outfile.write(name_superclass +' -> '+name_entity+'\n')

outfile.write('\nedge[style=dotted,arrowhead=normal,arrowtail=none]\n')

for entity in entities:

name_entity = regex.sub('',entity)
if 'classifier' in kb.part2_itself[entity]:
classifiers = kb.part2_itself[entity]['classifier']
for classifier in classifiers:
name_classifier = regex.sub('',classifier )
outfile.write(name_classifier +' -> '+name_entity+'\n')

outfile.write('\n}')
outfile.close()

...пишет теперь такой вот .dot-файл
по которому Graphviz рисует такую вот картинку .gif (размер 5000x20000; 4 Мб)

Добавлены списки ролей и их типизация.
Информации больше, но визуально читается похуже.

UPDATE:
если прибить связи ролей с Cardinality и выставить в Graphviz алгоритм fdp
результат чуть лучше(размер 5500x13000; 3.5 Мб).
Previous post Next post
Up