2010-12-09 3 views
3

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

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

Что бы простой способ создания диаграммы этого, показывая объекты, помещенные хорошо в 2D пространстве, с линиями между ними ?

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

+0

Я думаю, вы забыли включить описание, которое вы обещали ... разве вы не хотите, чтобы мы объяснили, как создать диаграмму пробела? – gutch 2010-12-09 04:36:44

+0

У вас должен быть отложенный код 4 пробела (или использовать кнопку 101010 в редакторе), особенно XML. Я исправил это для вас. – 2010-12-09 04:43:03

+0

кричит, спасибо. – 2010-12-09 08:40:55

ответ

3

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

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

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

alt text


Edited добавить: А для дополнительных бонусных очков, интерактивная схема SVG с использованием только онлайн инструменты here. Это использует Dracula Graph Library и W3C XSLT Service. Это потребовало создания XSLT stylesheet (непосредственно адаптированного из онлайн-примеров для библиотеки графиков Дракулы). Входной документ, используемый для преобразования, можно найти here.

2

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

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

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

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

0

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

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

Смежные вопросы