Как визуализировать набор взаимосвязанных объектов XML? - PullRequest
3 голосов
/ 09 декабря 2010

У меня есть несколько XML-документов, которые, в общем, упрощенно, можно описать так:

<someobject id="mykey">
  <relatedobject id="hiskey"/>
  <relatedobject id="herkey"/>
</someobject>
<someobject ...

Какой простой способ создать диаграмму этого, показывающую объекты, красиво расположенные в 2D-пространствелинии между ними?

Мне очень комфортно с XSLT и Xpath, но я бы предпочел решение, которое не требует написания программы с нуля.Сделав несколько вызовов командной строки в Saxon, тогда программа для генерации графа будет в порядке.Бонусные баллы за все, что может быть сделано полностью с помощью онлайн-инструментов.Дополнительные бонусные баллы за живое (например, javascript), интерактивную диаграмму.

Ответы [ 3 ]

3 голосов
/ 09 декабря 2010

Вот быстрое решение, которое можно напрямую вставить в оболочку, используя GraphViz как , предложенное Филиппом .Это позволяет использовать xmlstarlet , чтобы избежать необходимости писать таблицу стилей XSLT с нуля.

( echo "graph G {" 
  xmlstarlet sel -t -m "//someobject/relatedobject" \
    -v "concat(../@id, ' -- ', @id, '&#xa;')" input.xml 
   echo "}" ) | dotty -

Пример вывода:

alt text


Отредактировано для добавления: А для дополнительных бонусных баллов - интерактивная диаграмма SVG с использованием только онлайн-инструментов здесь .Для этого используются Библиотека графов Дракулы и W3C XSLT Service .Это потребовало создания таблицы стилей XSLT (непосредственно адаптированной из онлайн-примеров для библиотеки графиков Дракулы).Входной документ, используемый для преобразования, можно найти здесь .

2 голосов
/ 09 декабря 2010

Я бы предложил использовать GraphViz : вы создаете текстовый файл с использованием XSLT, который описывает график, который вы хотели бы.См. этот пример для краткого обзора.

Я не слишком знаком с ним больше, но я думаю, что

graph G { 
  mykey -- hiskey
  mykey -- herkey
}

должен сделать эту работу.

0 голосов
/ 09 декабря 2010

Это не простая проблема.Я давно написал программу для кластеризации XML-документов, но отображение представляет собой сетку, а не график.Тем не менее, вас может заинтересовать код, если вы собираетесь что-то реализовать.Кроме того, вы можете приписать ключевые слова вашим документам, и будут использоваться ключевые слова, а также ссылки для кластеризации документов, и они также будут использоваться для именования результирующих кластеров.При большом количестве документов отображение сетки, вероятно, лучше, чем график.

http://media4.obspm.fr/outils/clustering/doc_en.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...