|
| ||||||||||||
| ||||||||||||
|
2007 г.
GraphML - язык описания графовПо материалам сайта http://graphml.graphdrawing.org/
Оглавление
Предисловие переводчикаПроект GraphML имеет целью создание стандартизованного языка описания графов являющегося подмножеством языка XML. Данный документ представляет собой перевод материалов сайта http://graphml.graphdrawing.org/ , содержащего информацию о проекте GraphML на русский язык, и объединяет в одном файле материалы из нескольких разделов указанного выше сайта. При этом нормативными документами считаются оригинальные тексты на английском языке, которые можно найти в соответствующих разделах сайта http://graphml.graphdrawing.org/. Представленный документ может содержать ошибки перевода. Перевод выполнил Шокоров В. П. (http://PenzaVld.narod.ru). АннотацияПроект GraphML был начат комитетом "Graph Drawing Steering Committee" до начала симпозиума Graph Drawing 2000 в Вильямсбурге. Рабочая встреча относительно формата файла была проведена накануне симпозиума, и на ней было согласовано создание группы, которая определила новый, основанный на языке XML, формат файла, который должен в конечном счете лечь в основу стандарта описания графов. С тех пор, язык был расширен в части поддержки основных типов атрибутов и в части включения информации для использования синтаксическими анализаторами. Следующим важным шагом в расширении языка будет включение абстрактной информации для описания топологии графа и шаблонов с помощью которых эту информацию можно было бы преобразовать в различные графические форматы. Программное обеспечение для поддержки работы с GraphML находится в стадии разработки. Один из главных предшественников GraphML - GML. GML появился в результате работы, начатой на Graph Drawing 1995 в Пассау и завершенной на Graph Drawing 1996 в Беркли. GML был (и все еще остается) основным файловым форматом для Graphlet, а также поддерживается рядом других систем обработки графов. Рабочая группаGraphML создается многими людьми, находящимися в различных местах. Наравне с другими текущую работу координируют: Ulrik Brandes (University of Konstanz); Markus Eiglsperger; Michael Kaufmann (University of Tübingen); Jürgen Lerner (University of Konstanz); Christian Pich (University of Konstanz). В консультативную группу входят: Ivan Herman (CWI); Stephen North (AT&T Research); Roberto Tamassia (Brown University). На этапе формирования структуры активно работали, или были подписаны на полуоткрытый список обсуждения GraphML: Michael Himsolt (DaimlerChrysler); M. Scott Marshall (then CWI); Vladimir Batagelj (University of Ljubljana); Anne-Lise Gros (LIRMM); Carsten Gutwenger (Caesar); David Jensen (University of Massachusetts); Serban Jora (AT&T Research); Sascha Meinert (University of Tübingen); Guy Melancon (LIRMM); Petra Mutzel (Technical University of Vienna); Maurizio Patrignani (University of Rome III); Tim Pattison (DSTO); Matthew Phillips (DSTO); John Punin (Rensselaer Polytechnic Institute); Susan Sim (University of Toronto); Adrian Vasiliu (Ilog); Vance Waddle (IBM Research); Andreas Winter (University of Koblenz). О сайте GraphMLСайт GraphML перепроектирован и перезапущен 22 июня 2002 года. С этого времени страницы генерируются с помощью Apache Software Foundation's XML publishing framework Cocoon. Мы благодарим Джона Риттера (университет Konstanz) за эту работу. ВведениеGraphML - полнофункциональный и удобный в работе файловый формат для описания графов. Он включает базовый язык предназначенный для описания структурных свойств графа и гибкий механизм расширения его расширения, что позволяет включать в описание графа данные специфичные для приложений. GraphML включает поддержку направленных, ненаправленных, и смешанных графов, гиперграфов, иерархических графов, описание графического представления, ссылок к внешним данным, специфических для приложения атрибутов, и облегченного синтаксического анализатора. В отличие от многих других форматов описания графов, GraphML не использует заказной синтаксис. Вместо этого он использует синтаксис основанный на языке XML, и следовательно идеально подходит в качестве универсального средства для формирования, архивирования, или обработки графов. С чего начатьДля быстрого ознакомления с GraphML рекомендуется ознакомится с практическим введением. Оно не является нормативным документом, а предназначен для облегчения понимания возможностей GraphML. Нормативное описание языка содержится в нижеприведённой спецификации GraphML. 1.Спецификация1.1. Общие сведенияСпецификация языка GraphML определяет его синтаксис, правила правила обработки базового языка (структурный уровень) и двух его расширений, связанных с описанием атрибутов базовых типов и описанием информации для синтаксического анализа. Хотя достаточно подробное введение в описание языка можно найти здесь, дополнительную информацию, связанную с GraphML можно найти по адресу: U. Brandes, M. Eiglsperger, I. Herman, M. Himsolt, and M.S. Marshall: GraphML Progress Report: Structural Layer Proposal. Proc. 9th Intl. Symp. Graph Drawing (GD '01), LNCS 2265, pp. 501-512. © Springer-Verlag, 2002. 1.2. СинтаксисСинтаксис GraphML определяется GraphML-схемой. Не смотря на то, что схема является более информативным документом, также обеспечено менее строгое описание синтаксиса с помощью Document Type Definition (DTD), в котором, например, не описаны ссылочные типы вроде идентификаторов ребер и узлов графа. Однако, для нормальной работы некоторых приложений, возможно, требуется DTD. 1.3.GraphML-схемаGraphML-схема представлена следующими файлами:
1.4. GraphML-DTDОписание синтаксиса GraphML с помощью DTD представлено в файле graphml.dtd. 1.5.Правила обработкиЭлементы, которые приложение не может обработать, игнорируются. То есть GraphML-документ интерпретируется так, как будто он состоит только из тех элементов, которые известны и понятны приложению. В частности:
1.6. Дополнительные данныеGraphML обеспечивают механизм добавление данных к структурным элементам (например, таким как <graph>, <node>, <edge>, и т.д.). Такой механизм реализуется с помощью типизированных данных, которые могут использоваться для определения данных заданного типа внутри структурных элементов. Тип данных задается элементом <key>. Область определения типа (домен) задается с помощью атрибута 'for' элемента <key>. Значения данных задаются с помощью элемента <default> (потомок элемента <key>) и/или элементов <data> (потомки элементов, которые находятся в домене типа), у которых значение атрибута 'key' равно значению атрибута 'id' элемента <key>. 1.6.1. Типизация данныхРасширение базового языка для описания атрибутов базовых типов позволяет специфицировать диапазон значений вышеупомянутых типов данных. Это делает с помощью дополнительного атрибута 'attr.type' элемента <key>. Атрибут 'attr.type' (может принимать значения: 'boolean', 'int', 'long', 'float', 'double', 'string') определяет, как интерпретировать символьную строку в элементах <data> и <default>. С помощью атрибута 'attr.name' элемента <key> тип данных может быть поименован. 1.6.2. Информация для синтаксических анализаторовРасширение базового языка в части описания информации для синтаксического анализа добавляет несколько дополнительных атрибутов к элементам <graph> и <node>, которые помогают анализаторам более эффективно обрабатывать документ. Эти атрибуты, например, определяют число узлов или ребер, степень узлов, максимальную/минимальную степень и т.д. 1.6.3. Пользовательские расширенияGraphML может быть расширен двумя способами:
Как это можно сделать, будет разъяснено в более подробном описании, которое в настоящее время готовится. 1.7. Описание элементовОписание элементов дается в соответствии с GraphML-схемой. <desc>Назначение: позволяет включать в элементы текст комментария. Элемент для которого предназначены комментарии должен включать элемент <desc> в качестве первого потомка. Область применения: <key>, <graphml>, <graph>, <node>, <port>, <edge>, <hyperedge>,<endpoint>. <locator >Назначение: графы и узлы объявляются с помощью элементов <graph> и <node>, соответственно. Необязательный элемент <locator> который может быть потомком этих элементов указывает на их определение. Если элемент-потомок <locator> не задан, то графы и узлы определяются содержимым элементов <graph> и <node>. Область применения: <graph>,<node>. Тип: locator.type - комплексный тип, содержащий описание элемента <locator>. Допустимое содержание - пусто. Определение типа конечно. Атрибуты:
<data>Назначение: в GraphML возможно определение данных привязанных к графам, узлам, портам, ребрам, гиперребрам, конечной точке, а также ко всей совокупности графов, описанных в <graphml>. Объявление типов данных производится с помощью элементов <key>, являющихся потомками <graphml>, а определение данных с помощью элементов <data>. Область применения: <graphml>, <graph>, <node>, <port>, <edge>, <hyperedge>, <endpoint>. Тип: data.type - комплексный тип, содержащий описание элемента <data>. Тип data.type - смешанный, поэтому элемент <data> может содержать данные типа #PCDATA. Допустимое содержание - расширения типа data-extension.type, которое по умолчанию задает пустое значение. Определение типа конечно. Атрибуты:
Ограничения целостности: data_data_key_unique. Это ограничение гарантирует уникальность атрибутов 'key' у элементов <data>, являющихся потомками данного элемента <data>. <key>Назначение: в GraphML возможно определение данных привязанных к графам, узлам, портам, ребрам, гиперребрам, конечной точке, а также ко всей совокупности графов, описанных в <graphml>. Объявление типов данных производится с помощью элементов <key> (потомки <graphml>), а определение данных с помощью элементов <data>. Область применения: <graphml>. Тип: key.type - комплексный тип, содержащий описание элемента <key>. Определение типа конечно. Атрибуты:
Содержимое: <desc>?, <default>? <default>Назначение: в GraphML возможно определение данных привязанных к графам, узлам, портам, ребрам, гиперребрам, конечной точке, а также ко всей совокупности графов, описанных в <graphml>. Объявление типов данных производится с помощью элементов <key> (потомки <graphml>), а определение данных с помощью элементов <data>. Необязательный элемент <default>, являющийся потомком элемента <key>, задает значение по умолчанию для типа данных объявленного с помощью данного элемента <key>. Область применения: <key>. Тип: default.type - комплексный тип, содержащий описание элемента <default>. Тип default.type - смешанный, поэтому он может содержать данные типа #PCDATA. Допустимое содержание - расширения типа data-extension.type, которое по умолчанию задает пустое значение. Определение типа конечно. Атрибуты: default.extra.attrib - ссылка на описание дополнительных, определяемых пользователем, атрибутов. <graphml>Назначение: <graphml> - корневой элемент документа. Область применения: root. Тип: graphml.type - комплексный тип, содержащий описание элемента <graphml>. Определение типа конечно. Атрибуты: graphml.extra.attrib - ссылка на описание дополнительных, определяемых пользователем, атрибутов. Содержимое: <desc>?, <key>*, ( <graph> | <data> ) * Ограничения целостности:
<graph>Назначение: элемент описывает граф (подграф). Область применения: <graphml>, <node>, <edge>, <hyperedge>. Тип: graph.type - комплексный тип, содержащий описание элемента <graph>. Определение типа конечно. Атрибуты:
Содержимое: <desc>?, ( ( <data> | <node> | <edge> | <hyperedge> ) * | <locator> ) Ограничения целостности:
<node>Назначение: элемент описывает узел (<node>) в графе (<graph>).
Область применения: <graph>.
Тип: node.type - комплексный тип, содержащий описание элемента <node>. Описание типа конечно.
Атрибуты:
Содержимое: <desc>?, ( ( <data> | <port> ) *, <graph>? | <locator> )
Ограничения целостности:
Назначение: элемент описывает порт в данном узле. Узлы могут быть структурированы с помощью портов. Таким образом ребра могут быть связаны не только с некоторым узлом графа, но и с некоторым портом в данном узле.
Область применения: <node>, <port>.
Тип: port.type - комплексный тип, содержащий описание элемента <port>. Описание типа конечно.
Атрибуты:
Содержимое: <desc>?, ( <data> | <port> ) * Ограничения целостности: port_data_key_unique - обеспечивает уникальность атрибутов 'key' элементов <data>, являющихся потомками данного элемента <port>.
Назначение: элемент описывает одно ребро в графе <graph>.
Область применения: <graph>.
Тип: edge.type - комплексный тип, содержащий описание элемента <edge>. Описание типа конечно.
Атрибуты:
Содержимое: <desc>?, <data>*, <graph>?
Ограничения целостности: edge_data_key_unique - обеспечивает уникальность атрибутов 'key' элементов <data>, являющихся потомками данного элемента <edge>.
Назначение: элемент описывает гиперребро. Аналогично тому, как ребро задает связь между двумя узлами, гиперребро задает связь между произвольным числом узлов.
Область применения: <graph>.
Тип: hyperedge.type - комплексный тип, содержащий описание элемента <hyperedge>. Описание типа конечно.
Атрибуты:
Содержимое: <desc>?, ( <data> | <endpoint> ) *, <graph>? Ограничение целостности: hyperedge_data_key_unique - обеспечивает уникальность атрибутов 'key' элементов <data>, являющихся потомками данного элемента <hyperedge>.
Назначение: элемент задает конечную точку, входящую в список конечных точек гиперребра. Каждая конечная точка <endpoint> определяет соответствующий ей узел <node>.
Область применения: <hyperedge>.
Тип: endpoint.type - комплексный тип, содержащий описание элемента <endpoint>. Описание типа конечно.
Атрибуты:
Содержимое: <desc>?
Описание типов дается в соответствии с GraphML-схемой.
Простой тип, задающий допустимые значения атрибута 'for' элемента <key>. key.for.type является подмножеством типа xs:NMTOKEN. Допустимые значения: 'all', 'graph', 'node', 'edge', 'hyperedge', 'port' и 'endpoint'.
Простой тип, задающий допустимые значения атрибута 'edgedefault' элемента <graph>. graph.edgedefault.type является подмножеством типа xs:NMTOKEN. Допустимые значения: 'directed', 'undirected'.
Простой тип, задающий допустимые значения атрибута 'type' элемента <endpoint>. endpoint.type.type является подмножеством типа xs:NMTOKEN. Допустимые значения: 'in', 'out', 'undir'.
Механизм расширения содержимого элементов <data> и <default>. По умолчанию комплексный тип data-extension.type пуст. Пользователи могут переопределить этот тип в соответствии с тем содержимым, которое требуется дополнительно определить в комплексных типах data.type и default.type, являющихся расширениями типа data-extension.type.
Комплексный тип, определяющий элемент <data>. data.type является смешанным типом, поэтому элемент <data> может содержать #PCDATA. Тип содержимого: расширение типа data-extension.type, который по умолчанию пуст. Описание типа конечно.
Атрибуты:
Комплексный тип, определяющий элемент <default>. default.type является смешанным типом, поэтому элемент может содержать #PCDATA. Тип содержимого: расширение типа data-extension.type, который по умолчанию пуст. Описание типа конечно.
Атрибуты:
default.extra.attrib - описание дополнительных, определяемых пользователем, атрибутов .
Комплексный тип, определяющий элемент <key>. Описание типа конечно.
Атрибуты:
Содержимое: <desc>?, <default>?
Комплексный тип, определяющий элемент <graphml>. Описание типа конечно.
Атрибуты: graphml.extra.attrib - описание дополнительных, определяемых пользователем, атрибутов. Содержимое: <desc>?, <key>*, ( <graph> | <data> ) *
Комплексный тип, определяющий элемент <graph>. Описание типа конечно.
Атрибуты:
Содержимое: <desc>?, ( ( <data> | <node> | <edge> | <hyperedge> ) * | <locator> )
Комплексный тип, определяющий элемент <node>. Описание типа конечно.
Атрибуты:
Содержимое: <desc>?, ( ( <data> | <port> ) *, <graph>? | <locator> )
Комплексный тип, определяющий элемент <port>. Описание типа конечно.
Атрибуты:
Содержимое: <desc>?, ( <data> | <port> ) *
Комплексный тип, определяющий элемент <edge>. Описание типа конечно.
Атрибуты:
Содержимое: <desc>?, <data>*, <graph>?
Комплексный тип, определяющий элемент <hyperedge>. Описание типа конечно.
Атрибуты:
Содержимое: <desc>?, ( <data> | <endpoint> ) *, <graph>?
Комплексный тип, определяющий элемент <endpoint>. Описание типа конечно.
Атрибуты:
Содержимое: <desc>?
Комплексный тип, определяющий элемент <locator>. Тип содержимого: пусто. Описание типа конечно.
Атрибуты:
xlink:href (обязателен) ссылка на ресурс данного локатора.
xlink:type (необязателен) тип гиперссылки (может быть только типа 'simple').
locator.extra.attrib - описание дополнительных, определяемых пользователем, атрибутов.
|
|
CITForum © 1997–2025