blob: 68f6617b82377c38a61f40af3a2c11427ba976cc [file] [log] [blame]
<?xml version="1.0"?>
<!-- Header -->
<xs:schema
targetNamespace="http://www.yworks.com/xml/graphml"
xmlns="http://www.yworks.com/xml/graphml"
xmlns:g="http://graphml.graphdrawing.org/xmlns/graphml"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xlink="http://www.w3.org/1999/xlink"
elementFormDefault="qualified"
attributeFormDefault="unqualified"
>
<!-- -->
<!-- Enumeration Types -->
<!-- -->
<!-- LineType -->
<xs:simpleType name="lineType.type">
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="line"/>
<xs:enumeration value="dashed"/>
<xs:enumeration value="dotted"/>
</xs:restriction>
</xs:simpleType>
<!-- Font styles -->
<xs:simpleType name="fontStyle.type">
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="plain"/>
<xs:enumeration value="bold"/>
<xs:enumeration value="italic"/>
</xs:restriction>
</xs:simpleType>
<!-- Shape of Shape Nodes -->
<xs:simpleType name="ShapeType.type">
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="rectangle"/>
<xs:enumeration value="roundrectangle"/>
<xs:enumeration value="ellipse"/>
<xs:enumeration value="parallelogram"/>
<xs:enumeration value="hexagon"/>
<xs:enumeration value="octagon"/>
<xs:enumeration value="diamond"/>
<xs:enumeration value="triangle"/>
<xs:enumeration value="trapezoid"/>
<xs:enumeration value="trapezoid2"/>
<xs:enumeration value="rectangle3d"/>
</xs:restriction>
</xs:simpleType>
<!-- Arrow types -->
<xs:simpleType name="arrowType.type">
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="standard"/>
<xs:enumeration value="delta"/>
<xs:enumeration value="diamond"/>
<xs:enumeration value="white_diamond"/>
<xs:enumeration value="white_delta"/>
<xs:enumeration value="none"/>
</xs:restriction>
</xs:simpleType>
<!-- Alignment of Labels -->
<xs:simpleType name="alignment.type">
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="center"/>
<xs:enumeration value="left"/>
<xs:enumeration value="right"/>
</xs:restriction>
</xs:simpleType>
<!-- Node Label Models -->
<xs:simpleType name="nodeLabelModel.type">
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="free"/>
<xs:enumeration value="sides"/>
<xs:enumeration value="corners"/>
<xs:enumeration value="eight_pos"/>
<xs:enumeration value="sandwich"/>
<xs:enumeration value="internal"/>
</xs:restriction>
</xs:simpleType>
<!-- Node Label Positions -->
<xs:simpleType name="nodeLabelPosition.type">
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="n"/>
<xs:enumeration value="nw"/>
<xs:enumeration value="ne"/>
<xs:enumeration value="w"/>
<xs:enumeration value="e"/>
<xs:enumeration value="sw"/>
<xs:enumeration value="s"/>
<xs:enumeration value="se"/>
<xs:enumeration value="c"/>
<xs:enumeration value="tl"/>
<xs:enumeration value="t"/>
<xs:enumeration value="tr"/>
<xs:enumeration value="r"/>
<xs:enumeration value="l"/>
<xs:enumeration value="bl"/>
<xs:enumeration value="b"/>
<xs:enumeration value="br"/>
<xs:enumeration value="anywhere"/>
</xs:restriction>
</xs:simpleType>
<!-- AutoSizePolicy -->
<xs:simpleType name="autoSizePolicy.type">
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="node_width"/>
<xs:enumeration value="node_height"/>
<xs:enumeration value="content"/>
</xs:restriction>
</xs:simpleType>
<!-- Edge Label Models -->
<xs:simpleType name="edgeLabelModel.type">
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="centered"/>
<xs:enumeration value="center_slider"/>
<xs:enumeration value="side_slider"/>
<xs:enumeration value="free"/>
<xs:enumeration value="two_pos"/>
<xs:enumeration value="three_center"/>
<xs:enumeration value="six_pos"/>
</xs:restriction>
</xs:simpleType>
<!-- Edge Label Positions -->
<xs:simpleType name="edgeLabelPosition.type">
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="center"/>
<xs:enumeration value="tcentr"/>
<xs:enumeration value="scentr"/>
<xs:enumeration value="anywhere"/>
<xs:enumeration value="stail"/>
<xs:enumeration value="ttail"/>
<xs:enumeration value="tail"/>
<xs:enumeration value="shead"/>
<xs:enumeration value="thead"/>
<xs:enumeration value="head"/>
</xs:restriction>
</xs:simpleType>
<!-- Preferred Edge Label Positions -->
<xs:simpleType name="preferredPlacement.type">
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="target_right"/>
<xs:enumeration value="target"/>
<xs:enumeration value="target_left"/>
<xs:enumeration value="source_right"/>
<xs:enumeration value="source"/>
<xs:enumeration value="source_left"/>
<xs:enumeration value="center_right"/>
<xs:enumeration value="center"/>
<xs:enumeration value="center_left"/>
<xs:enumeration value="anywhere"/>
</xs:restriction>
</xs:simpleType>
<!-- horizontalTextPosition value type for labels -->
<xs:simpleType name="horizontalTextPosition.type">
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="left"/>
<xs:enumeration value="right"/>
<xs:enumeration value="center"/>
<xs:enumeration value="left_aligned"/>
<xs:enumeration value="right_aligned"/>
</xs:restriction>
</xs:simpleType>
<!-- verticalTextPosition value type for labels -->
<xs:simpleType name="verticalTextPosition.type">
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="top"/>
<xs:enumeration value="bottom"/>
<xs:enumeration value="center"/>
</xs:restriction>
</xs:simpleType>
<!-- -->
<!-- Geometric types -->
<!-- -->
<!-- Location defined by x,y coordinates -->
<xs:attributeGroup name="Location.group">
<xs:attribute name="x" type="xs:double" use="required"/>
<xs:attribute name="y" type="xs:double" use="required"/>
</xs:attributeGroup>
<!-- Location defined by x,y coordinates and width,height -->
<xs:attributeGroup name="Rectangle.group">
<xs:attribute name="x" type="xs:double" use="required"/>
<xs:attribute name="y" type="xs:double" use="required"/>
<xs:attribute name="width" type="xs:double" use="required"/>
<xs:attribute name="height" type="xs:double" use="required"/>
</xs:attributeGroup>
<!-- type for required rectangles -->
<xs:complexType name="Rectangle.type">
<xs:attributeGroup ref="Rectangle.group"/>
</xs:complexType>
<!-- type for optional rectangles -->
<xs:attributeGroup name="OpRectangle.group">
<xs:attribute name="x" type="xs:double" use="optional"/>
<xs:attribute name="y" type="xs:double" use="optional"/>
<xs:attribute name="width" type="xs:double" use="optional"/>
<xs:attribute name="height" type="xs:double" use="optional"/>
</xs:attributeGroup>
<!-- type for a path -->
<xs:complexType name="Path.type">
<xs:sequence>
<xs:element name="Point" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attributeGroup ref="Location.group"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="reversedPathRendering" type="xs:boolean" use="optional"/>
<xs:attribute name="sx" type="xs:double" use="optional"/>
<xs:attribute name="sy" type="xs:double" use="optional"/>
<xs:attribute name="tx" type="xs:double" use="optional"/>
<xs:attribute name="ty" type="xs:double" use="optional"/>
</xs:complexType>
<!-- -->
<!-- Misc Types -->
<!-- -->
<!-- color -->
<xs:simpleType name="color.type">
<xs:restriction base="xs:string">
<xs:pattern value="#(([A-F]|[0-9]){2}){3,4}"/>
</xs:restriction>
</xs:simpleType>
<!-- Style for a line -->
<xs:complexType name="LineStyle.type">
<xs:attribute name="color" type="color.type" use="optional"/>
<xs:attribute name="hasColor" type="xs:boolean" use="optional"/>
<xs:attribute name="type" type="lineType.type" use="optional"/>
<xs:attribute name="width" type="xs:double" use="optional"/>
</xs:complexType>
<!-- drop shadow style -->
<xs:complexType name="DropShadow.type">
<xs:attribute name="color" type="color.type" use="optional"/>
<xs:attribute name="offsetX" type="xs:byte" use="optional"/>
<xs:attribute name="offsetY" type="xs:byte" use="optional"/>
</xs:complexType>
<!-- -->
<!-- Labels -->
<!-- -->
<!-- Basic properties of all kind of labels -->
<xs:complexType name="Label.type">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attributeGroup ref="OpRectangle.group"/>
<xs:attribute name="visible" type="xs:boolean" use="optional"/>
<xs:attribute name="alignment" type="alignment.type" use="optional"/>
<xs:attribute name="textColor" type="color.type" use="optional"/>
<xs:attribute name="lineColor" type="color.type" use="optional"/>
<xs:attribute name="hasLineColor" type="xs:boolean" use="optional"/>
<xs:attribute name="backgroundColor" type="color.type" use="optional"/>
<xs:attribute name="hasBackgroundColor" type="xs:boolean" use="optional"/>
<xs:attribute name="fontFamily" type="xs:string" use="optional"/>
<xs:attribute name="fontSize" type="xs:unsignedByte" use="optional"/>
<xs:attribute name="fontStyle" type="fontStyle.type" use="optional"/>
<xs:attribute name="rotationAngle" type="xs:double" use="optional"/>
<xs:attribute name="icon" type="xs:anyURI" use="optional"/>
<xs:attribute name="underlinedText" type="xs:boolean" use="optional"/>
<xs:attribute name="horizontalTextPosition" type="horizontalTextPosition.type" use="optional"/>
<xs:attribute name="verticalTextPosition" type="verticalTextPosition.type" use="optional"/>
<xs:attribute name="iconTextGap" type="xs:byte" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!-- Node Labels -->
<xs:complexType name="NodeLabel.type">
<xs:simpleContent>
<xs:extension base="Label.type">
<xs:attribute name="modelName" type="nodeLabelModel.type" use="optional"/>
<xs:attribute name="modelPosition" type="nodeLabelPosition.type" use="optional"/>
<xs:attribute name="autoSizePolicy" type="autoSizePolicy.type" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!-- Edge Labels -->
<xs:complexType name="EdgeLabel.type">
<xs:simpleContent>
<xs:extension base="Label.type">
<xs:attribute name="modelName" type="edgeLabelModel.type" use="optional"/>
<xs:attribute name="modelPosition" type="edgeLabelPosition.type" use="optional"/>
<xs:attribute name="preferredPlacement" type="preferredPlacement.type" use="optional"/>
<xs:attribute name="distance" type="xs:double" use="optional"/>
<xs:attribute name="ratio" type="xs:double" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="Geometry.type">
<xs:attributeGroup ref="Rectangle.group"/>
</xs:complexType>
<!-- -->
<!-- Nodes -->
<!-- -->
<!-- Generic attributes for all nodes -->
<xs:complexType name="Node.type">
<xs:sequence>
<xs:element name="Geometry" minOccurs="0" maxOccurs="1" type="Geometry.type"/>
<xs:element name="Fill" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="hasColor" type="xs:boolean" use="optional"/>
<xs:attribute name="color" type="xs:string" use="optional"/>
<xs:attribute name="color2" type="xs:string" use="optional"/>
<xs:attribute name="transparent" type="xs:boolean" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="BorderStyle" type="LineStyle.type" minOccurs="0" maxOccurs="1"/>
<xs:element name="NodeLabel" type="NodeLabel.type" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="selected" type="xs:boolean" use="optional"/>
</xs:complexType>
<!-- Shape Node -->
<xs:complexType name="ShapeNode.type">
<xs:complexContent>
<xs:extension base="Node.type">
<xs:sequence>
<xs:element name="Shape" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="type" type="ShapeType.type" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="DropShadow" type="DropShadow.type" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- Image Node -->
<xs:complexType name="ImageNode.type">
<xs:complexContent>
<xs:extension base="Node.type">
<xs:sequence>
<xs:element name="Image">
<xs:complexType>
<xs:attribute name="href" type="xs:anyURI" use="required"/>
<xs:attribute name="alphaImage" type="xs:boolean" use="optional"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- Group Node -->
<xs:complexType name="GroupNode.type">
<xs:complexContent>
<xs:extension base="Node.type">
<xs:sequence>
<xs:element name="State" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="closed" type="xs:boolean" use="optional"/>
<xs:attribute name="innerGraphDisplayEnabled" type="xs:boolean" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="Insets" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="top" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="bottom" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="left" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="right" type="xs:nonNegativeInteger" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="BorderInsets" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="top" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="bottom" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="left" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="right" type="xs:nonNegativeInteger" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- Proxy Shape Node -->
<xs:complexType name="ProxyShapeNode.type">
<xs:sequence>
<xs:element name="Realizers">
<xs:complexType>
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="ShapeNode"/>
<xs:element ref="ImageNode"/>
<xs:element ref="GroupNode"/>
</xs:choice>
</xs:sequence>
<xs:attribute name="active" type="xs:nonNegativeInteger" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<!-- Generic Node -->
<xs:complexType name="GenericNode.type">
<xs:complexContent>
<xs:extension base="Node.type">
<xs:sequence>
<xs:element name="UserData">
<xs:complexType>
<xs:attribute name="class" type="xs:string" use="required"/>
<xs:attribute name="value" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="configuration" type="xs:string" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- Element Definitions for Nodes -->
<xs:element name="ShapeNode" type="ShapeNode.type"/>
<xs:element name="ImageNode" type="ImageNode.type"/>
<xs:element name="GroupNode" type="GroupNode.type"/>
<xs:element name="GenericNode" type="GenericNode.type"/>
<xs:element name="ProxyShapeNode" type="ProxyShapeNode.type"/>
<xs:element name="ProxyAutoBoundsNode" type="ProxyShapeNode.type"/>
<!-- -->
<!-- Edges -->
<!-- -->
<!-- Generic attributes for all edges -->
<xs:complexType name="Edge.type">
<xs:sequence>
<xs:element name="Path" type="Path.type" minOccurs="0" maxOccurs="1"/>
<xs:element name="LineStyle" type="LineStyle.type" minOccurs="0" maxOccurs="1"/>
<xs:element name="Arrows" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="source" type="arrowType.type"/>
<xs:attribute name="target" type="arrowType.type"/>
</xs:complexType>
</xs:element>
<xs:element name="EdgeLabel" type="EdgeLabel.type" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="selected" type="xs:boolean" use="optional"/>
</xs:complexType>
<!-- Polyline edges -->
<xs:complexType name="PolyLineEdge.type">
<xs:complexContent>
<xs:extension base="Edge.type">
<xs:sequence>
<xs:element name="BendStyle">
<xs:complexType>
<xs:attribute name="smoothed" type="xs:boolean" use="optional"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- Type of Arc edges -->
<xs:simpleType name="arc.type">
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="fixedHeight"/>
<xs:enumeration value="fixedRatio"/>
</xs:restriction>
</xs:simpleType>
<!-- Arc edges -->
<xs:complexType name="ArcEdge.type">
<xs:complexContent>
<xs:extension base="Edge.type">
<xs:sequence>
<xs:element name="Arc">
<xs:complexType>
<xs:attribute name="type" type="arc.type" use="optional"/>
<xs:attribute name="height" type="xs:double" use="optional"/>
<xs:attribute name="ratio" type="xs:double" use="optional"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- QuadCurve edges -->
<xs:complexType name="QuadCurveEdge.type">
<xs:complexContent>
<xs:extension base="Edge.type">
<xs:attribute name="straightness" type="xs:double" use="optional"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- Generic edges -->
<xs:complexType name="GenericEdge.type">
<xs:complexContent>
<xs:extension base="Edge.type">
<xs:sequence>
<xs:element name="UserData">
<xs:complexType>
<xs:attribute name="class" type="xs:string" use="required"/>
<xs:attribute name="value" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="configuration" type="xs:string" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- Element definitions for edges -->
<xs:element name="PolyLineEdge" type="PolyLineEdge.type"/>
<xs:element name="ArcEdge" type="ArcEdge.type"/>
<xs:element name="BezierEdge" type="Edge.type"/>
<xs:element name="SplineEdge" type="Edge.type"/>
<xs:element name="QuadCurveEdge" type="QuadCurveEdge.type"/>
<xs:element name="GenericEdge" type="GenericEdge.type"/>
</xs:schema>