Назначение пространства имен по умолчанию в networkx.write_gexf

Дайте этот фрагмент кода, который библиотека python networkx генерирует как действительный файл GEXF, я не могу найти нигде в документах, где я меняю xmlns: ns0 вместо xmlns: а именно ... пространство имен, совместимое с GEXF.

<?xml version="1.0" encoding="utf-8"?><gexf xmlns:ns0="http://www.gexf.net/1.1draft/viz"     
version="1.1" xmlns="http://www.gexf.net/1.1draft" xmlns:viz="http://www.gexf.net/1.1draft/viz"    
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
xsi:schemaLocation="http://www.w3.org/2001/XMLSchema-instance">

  <graph defaultedgetype="directed" mode="static">
<attributes class="node" mode="static">
  <attribute id="0" title="origin" type="double" />
  <attribute id="1" title="size" type="integer" />
</attributes>
<nodes>
  <node id="0" label="Vijana Amani Pamoja (VAP)">
    <ns0:color b="70" g="11" r="160" />
    <ns0:size value="10" />
    <attvalues>
      <attvalue for="0" value="1.25" />
      <attvalue for="1" value="10" />
    </attvalues>
  </node>

Где-то я мог переопределить часть VIZ пространства имен по умолчанию для функции networkx write_gexf, но я тоже не знаю, где я это сделал, поэтому я спрашиваю здесь.

networkx.write_gexf(G,f) # G is the graph and f is the file to write.

(ОТРЕДАКТИРОВАНО): Узлы говорят ns0:... а не а именно:... как показано в документах GEXF. Это вызывает проблемы совместимости с другими библиотеками GEXF, которые используют параметры визуализации (и не могут их найти).


person Marc Maxmeister    schedule 05.02.2013    source источник
comment
xmlns:ns0="http://www.gexf.net/1.1draft/viz" - xmlns:ns0 и xmlns:viz оба здесь и указывают на gexf/.../viz. Я что-то пропустил?   -  person m.brindley    schedule 05.02.2013
comment
Я отредактировал пример — как вы можете видеть в части узла, он использует ns0 в качестве пространства имен по умолчанию, а не а именно.   -  person Marc Maxmeister    schedule 05.02.2013
comment
@MarcMaxson: вы узнали, как изменить пространство имен? Я сталкиваюсь с той же проблемой...   -  person user1043144    schedule 23.05.2013
comment
я думаю, что это квалифицируется как ошибка в networkx   -  person mmdanziger    schedule 25.08.2013
comment
networkx 2.1, похоже, сильно изменился, включая эту ошибку. заголовки теперь имеют xmlns:viz вместо xmlns:ns0, но управление толщиной и цветом краев по-прежнему недостаточно документировано. Я обнаружил, что если вы зададите узлу viz:color, он унаследует края узла.   -  person Marc Maxmeister    schedule 30.04.2018


Ответы (1)


У меня была та же проблема, и я обновил функцию «add_viz» в классе GEXFWriter в gexf.py следующим образом:

 def add_viz(self,element,node_data):
    viz=node_data.pop('viz',False)
    if viz:
        color=viz.get('color')
        if color is not None:
            e=Element("viz:color")
            e.attrib['r']=str(color.get('r'))
            e.attrib['g']=str(color.get('g'))
            e.attrib['b']=str(color.get('b'))
            if self.VERSION!='1.1':
                e.attrib['a']=str(color.get('a'))
            e.text=" "
            element.append(e)
        size=viz.get('size')
        if size is not None:
            e=Element("viz:size")
            e.attrib['value']=str(size)
            e.text=" "
            element.append(e)

        thickness=viz.get('thickness')
        if thickness is not None:
            e=Element("viz:thickness")
            e.attrib['value']=str(thickness)
            e.text=" "
            element.append(e)

        shape=viz.get('shape')
        if shape is not None:
            if shape.startswith('http'):
                e=Element("viz:shape")
                e.attrib['value']= 'image'
                e.attrib['uri']= str(shape)
            else:
                e=Element("viz:shape")
                e.attrib['value']= str(shape)
            e.text=" "
            element.append(e)

        position=viz.get('position')
        if position is not None:
            e=Element("viz:position")
            e.attrib['x']= str(position.get('x'))
            e.attrib['y']= str(position.get('y'))
            e.attrib['z']= str(position.get('z'))
            e.text=" "
            element.append(e)
    return node_data

Это решило для меня проблему совместимости с библиотеками/инструментами GEXF, которые я использую.

Бестс, ЗП

person ZPB    schedule 12.02.2015