Добавление XML-атрибутов в GraphML-элементы
В большинстве случаев, дополнительная информация может (и должна) быть связана с GraphML-элементами с помощью , что гарантируется совместимостью GraphML-парсеров. Однако, в ряде случаев более удобно использовать XML-атрибуты. Предположим у вас имеется парсер, который умеет обрабатывать -атрибут href и корректно интерпретировать его как URL. Предположим вы хотите хранить в GraphML граф, узлы которого представляют собой WWW-страницы. Для ассоциации узла со страницей его модель должна позволять вам в теге node присваивать атрибуту xlink:href URL-ссылку на соответсвующую страницу:
Элемент node, содержащий URL-ссылку
... <node id="n0" xlink:href="http://graphml.graphdrawing.org"/> ...
Для добавления XML-атрибутов в GraphML-элементы используется механизм расширение GraphML. Это расширение должно быть определено в XML-схеме. В документе показан атрибут href добавленный к элементу node:
Расширение GraphML: атрибуты
<?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>
Приведенный выше документ имеет следующие функциональные составляющие: в качестве корневого элемента документ имеет элемент schema. Значение атрибута targetNamespace ="http://graphml.graphdrawing.org/xmlns" говорит о том, что данный документ соответствует спецификации языка GraphML. Три следующих строки задают именное пространство документа, используемое по умолчанию и префикс именного пространства для XLink и XMLSchema . Атрибуты elementFormDefault и attributeFormDefault в данном примере неважны.
<xs:import namespace="http://www.w3.org/1999/xlink" schemaLocation="xlink.xsd"/> задает адрес местоположения именного пространства XLink , заданного в файле xlink.xsd .
<xs:redefine schemaLocation="http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd"> задает файл со схемой которая должна быть переопределена. Группа атрибутов node.extra.attrib включается в список атрибутов элемента node. После переопределения указанная группа атрибутов будет содержать старое содержимое , плюс атрибут с именем xlink:href, который является необязательным.
Кроме node.extra.attrib, имеются соответствующие группы атрибутов для всех основных GraphML-элементов.
В документе приведен пример документа который соответствует схеме .
GraphML-документ с дополнительными XML-атрибутами
<?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>