XML - статьи

Добавление комплексных типов


Структурированное содержимое может быть добавлено с помощью элемента data. Например, пользователь может хранить для узлов их изображения в формате .

Элемент node и его графическое представление

... xmlns:svg="http://www.w3.org/2000/svg" ... <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> ...

Для добавления структурированных данных в GraphML-элементы используется механизм расширения GraphML. Это расширение должно быть задано с помощью XML-схемы. Документ демонстрирует как элементы могут быть добавлены в содержимое data:

Расширение GraphML структурированными данными

<?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>

Вышеприведенная схема похожа на схему в примере с . Во первых присутсвуют объявления именного пространтсва. Во вторых, импортировано именное пространство SVG. Наконец расширен комплексный тип data-extension.type, который является базовым для описания содержимого элемента data, путем добавления элемента svg из именного пространства SVG.

В файле приведен документ, соответствующий схеме :

GraphML - документ с данными типа SVG


<?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>

Заметим, что узел с идентификатором n1 допускает графическое изображение по умолчанию, заданное элементом key с идентификатором k0. Вышеприведенный пример также демонстрирует использование именных пространств XML: задано два различных элемента desc - один в именном пространстве GraphML, а второй в именном пространстве SVG . Возможный конфликт, связанный с одинаковыми именами элементов в различных XML-языках, разрешен с помощью использования различных именных пространств.


Содержание раздела