图形描述语言GraphML(5):扩展 GraphML

GraphML的扩展是基于xml的扩展方式,通过增加namespace的引用就可以容易地扩展GraphML,包括xml属性的扩展和Complex Type的扩展。

 

属性扩展
xsd定义:

graphml+xlink.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema 
   
targetNamespace="http://graphml.graphdrawing.org/xmlns"
   xmlns
="http://graphml.graphdrawing.org/xmlns"  
   xmlns:xlink
="http://www.w3.org/1999/xlink"
   xmlns:xs
="http://www.w3.org/2001/XMLSchema"
   elementFormDefault
="qualified"
   attributeFormDefault
="unqualified"
>

<xs:import namespace="http://www.w3.org/1999/xlink"
           schemaLocation
="xlink.xsd"/>

<xs:redefine 
    
schemaLocation="http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
  
<xs:attributeGroup name="node.extra.attrib">
    
<xs:attributeGroup ref="node.extra.attrib"/>
    
<xs:attribute ref="xlink:href" use="optional"/>
  
</xs:attributeGroup>
</xs:redefine>

</xs:schema>


例子

<?xml version="1.0" encoding="UTF-8"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns"  
            xmlns:xlink
="http://www.w3.org/1999/xlink"
            xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation
="http://graphml.graphdrawing.org/xmlns 
                                graphml+xlink.xsd"
>
  
<graph edgedefault="directed">
    
<node id="n0" xlink:href="http://graphml.graphdrawing.org"/>
    
<node id="n1" />
    
<edge source="n0" target="n1"/>
  
</graph>
</graphml>


Complex Type扩展
xsd定义:

graphml+svg.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema 
   
targetNamespace="http://graphml.graphdrawing.org/xmlns"
   xmlns
="http://graphml.graphdrawing.org/xmlns"  
   xmlns:svg
="http://www.w3.org/2000/svg"
   xmlns:xs
="http://www.w3.org/2001/XMLSchema"
   elementFormDefault
="qualified"
   attributeFormDefault
="unqualified"
>

<xs:import namespace="http://www.w3.org/2000/svg"
           schemaLocation
="svg.xsd"/>

<xs:redefine 
    
schemaLocation="http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
  
<xs:complexType name="data-extension.type">
    
<xs:complexContent>
      
<xs:extension base="data-extension.type">
        
<xs:sequence>
          
<xs:element ref="svg:svg"/>
        
</xs:sequence>
      
</xs:extension>
    
</xs:complexContent>
  
</xs:complexType>
</xs:redefine>

</xs:schema>


例子:

<?xml version="1.0" encoding="UTF-8"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns"  
            xmlns:svg
="http://www.w3.org/2000/svg"
            xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation
="http://graphml.graphdrawing.org/xmlns 
                                graphml+svg.xsd"
>
  
<key id="k0" for="node">
    
<default>
      
<svg:svg width="5cm" height="4cm" version="1.1">
        
<svg:desc>Default graphical representation for nodes
        
</svg:desc>
        
<svg:rect x="0.5cm" y="0.5cm" width="2cm" height="1cm"/>
      
</svg:svg>
    
</default>
  
</key>  
  
<key id="k1" for="edge">
    
<desc>Graphical representation for edges
    
</desc>
  
</key>  
  
<graph edgedefault="directed">
    
<node id="n0">
      
<data key="k0">
        
<svg:svg width="4cm" height="8cm" version="1.1">
          
<svg:ellipse cx="2cm" cy="4cm" rx="2cm" ry="1cm" />
        
</svg:svg>  
      
</data>
    
</node>
    
<node id="n1" />
    
<edge source="n0" target="n1">
      
<data key="k1">
        
<svg:svg width="12cm" height="4cm" viewBox="0 0 1200 400">
          
<svg:line x1="100" y1="300" x2="300" y2="100"
           stroke-width
="5"  />
        
</svg:svg>
      
</data>
    
</edge>
  
</graph>
</graphml>
posted @ 2008-01-23 17:38  心内求法  阅读(1199)  评论(0编辑  收藏  举报