我在三年前找到了这个免费软件应用程序labytrinth(虽然它最后一次更新于2005年)。它允许作家组织他们故事中的角色和其他元素。人们可以创建元素然后将它们拖到窗口上,在窗口中可以用箭头连接不同的元素,添加关于关系性质的信息。
我的计算机最近崩溃了,虽然我没有丢失任何文件,因为一切都整齐备份,但我没有应用程序本身的副本。我从(habitualindolence.net)获取的网站已经消失(作为作家的有用用户发现了我),虽然我仍然想要找到任何可能仍然拥有它的人,但我的希望并不高。
尽管如此,我有文件(plt扩展名);现在我只需要想象它们。根据Writers用户的建议,我用记事本打开了文件,这给了我一个可读的代码。有人建议它可能是Python,但在线Python可视化器给出了语法错误。另一位用户提到它是一个XML文件。
有人可以推荐一种可视化代码的方法吗?这是前几行。如果您需要更长的摘录,请告诉我。
介绍部分:
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SaveFormat>3.5</SaveFormat>
<Name>TheNewWorld_01_AmbitiousPrince</Name>
列出字符的部分的细分:
<Elements>
<Element>
<ID>f9434e21-d471-466f-948b-107f9da58905</ID>
<Name>*Nyan Cleaner</Name>
<Type>Character</Type>
<Annotations>
<TextAnnotation>
<ID>dad71ecc-d38a-45e2-a695-d6ad0d679f57</ID>
<Title>Physical Description</Title>
<Content>Long, brown hair
brown eyes
lightly tanned skin
</Content>
<RTF>{\rtf1\ansi\ansicpg1252\deff0\deflang2070{\fonttbl{\f0 \fnil\fcharset0 Tahoma;}}
\viewkind4\uc1\pard\f0\fs17 Long, brown hair\par
brown eyes\par
lightly tanned skin\par
\par
}
</RTF>
具有'structures'标签的段将列出所有图表,每个图表('structure'标签)嵌套在'structures'标签中。
<Structures>
<Structure>
<ID>dc1f9607-32d7-42ac-abcd-8b27e066eca2</ID>
<Name>Nyan_Connections</Name>
'结构'块然后由具有位置的'节点'组成(参考带有字符名称的框)。 (请注意,以下部分会立即显示在上一个部分之后)
<Nodes>
<Node>
<ElementID>43a45855-529d-48d6-ad33-3602abd5e57c</ElementID>
<Position>
<X>0.8034632</X>
<Y>0.221544713</Y>
</Position>
</Node>
<Node>
<ElementID>aa94de7a-2241-4e41-a383-eadb070354d0</ElementID>
<Position>
<X>0.219047621</X>
<Y>0.8678862</Y>
</Position>
仍然在'结构'标签内,在'nodes'关闭后,您可以立即标记'链接'。这些是指连接上面不同节点的箭头。
<Links>
<Link>
<ID>4eb83f93-2d47-4afc-bc46-dfa83a4f1f96</ID>
<Description>Lovers</Description>
<LHS>f9434e21-d471-466f-948b-107f9da58905</LHS>
<RHS>c2b3f24d-c9f2-4832-b488-e1f3eca84b04</RHS>
<Direction>Double</Direction>
</Link>
<Link>
<ID>272dac28-a5f9-400c-a514-3aa9b971240f</ID>
<Description>Friend</Description>
<LHS>19f460ea-5ff9-4690-9adf-4b556489083e</LHS>
<RHS>f9434e21-d471-466f-948b-107f9da58905</RHS>
<Direction>Double</Direction>
</Link>
关闭'结构'标签后,我们有时间线部分(绘制图表的位置,表格中,垂直上的字符;水平中的时间点或章节;以及文本在其他地方绘制。)
<Timelines>
<Timeline>
<ID>531b95f1-a07d-4aa8-ad2e-86576322f41b</ID>
<Name>1-Ambitious_Ch02</Name>
这部分内容并不直观(至少对我而言)。它包括字符的标签(ElementIDs),章节(Points),然后是绘制的事件,标识每章中每个字符的内容(TimelinePoint)。
<ElementIDs>
<guid>f9434e21-d471-466f-948b-107f9da58905</guid>
<guid>19f460ea-5ff9-4690-9adf-4b556489083e</guid>
<guid>1ea36ec3-10e6-451d-a251-a139a51a6cfc</guid>
<guid>c2b3f24d-c9f2-4832-b488-e1f3eca84b04</guid>
</ElementIDs>
<Points>
<TimelinePoint>
<ID>9699cb8e-367d-4119-936a-b43c3cf403e2</ID>
<Name>scene1</Name>
<UseSchedule>None</UseSchedule>
<Schedule>0001-01-01T00:00:00</Schedule>
<Items>
<TimelineItem>
<ID>63ca24bf-b278-4df3-a88f-4984cabc8404</ID>
<ElementID>f9434e21-d471-466f-948b-107f9da58905</ElementID>
<Annotation>
<ID>c21bc9bb-7857-4099-97f4-14ef5b20b4f7</ID>
<Title>Arrives to work</Title>
<Content>She's late.</Content>
<RTF>{\rtf1\ansi\ansicpg1252\deff0\deflang2070{\fonttbl{\f0\fnil\fcharset0 Tahoma;}}
\viewkind4\uc1\pard\f0\fs17 She's late.\par
}
</RTF>
</Annotation>
</TimelineItem>
是的,我想我可以打印所有这些,将elementID与字符匹配,以便确定哪个字符连接到哪个字符并手动“翻译”除了......数百个ID?它必须更快找到一种可视化的方法。
更不用说这种编码看起来非常直观且类似于HTML;我开始怀疑我是否应该只看到近乎灾难的白银并将其作为获取XML的动力?
编辑(回应菲利普的评论)我使用该应用程序来组织角色并绘制一本涵盖5本书的奇幻故事。我有前4个完全计划和角色的关系注释。我需要找到一种方法来检索该信息。显然,我可以阅读代码来获取文本信息(字符列表等),但字符之间的关系是必不可少的,这就是我需要对其进行可视化的原因。这是一个例子:
答案 0 :(得分:2)
好的,在再次考虑这个问题后,我有另一种方法。 对于要跟踪的所有ID,XSLT可能会变得很难。
我尝试使用python脚本和graphviz。 在您的示例中,我制作了一个如下的匿名示例文件:
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SaveFormat>3.5</SaveFormat>
<Name>TheNewWorld_01_AmbitiousPrince</Name>
<Elements>
<Element>
<ID>f9434e21-d471-466f-948b-107f9da58905</ID>
<Name>*Some One</Name>
<Type>Character</Type>
</Element>
<Element>
<ID>f9434e21-d471-466f-948b-107f9da58906</ID>
<Name>*Some Other</Name>
<Type>Character</Type>
</Element>
<Element>
<ID>f9434e21-d471-466f-948b-107f9da58907</ID>
<Name>A Third</Name>
<Type>Character</Type>
</Element>
</Elements>
<Structures>
<Structure>
<ID>dc1f9607-32d7-42ac-abcd-8b27e066eca2</ID>
<Name>Some_Connections</Name>
<Nodes>
<Node>
<ElementID>f9434e21-d471-466f-948b-107f9da58905</ElementID>
<Position>
<X>0.8034632</X>
<Y>0.221544713</Y>
</Position>
</Node>
<Node>
<ElementID>f9434e21-d471-466f-948b-107f9da58906</ElementID>
<Position>
<X>0.219047621</X>
<Y>0.8678862</Y>
</Position>
</Node>
<Node>
<ElementID>f9434e21-d471-466f-948b-107f9da58907</ElementID>
<Position>
<X>0.219047621</X>
<Y>0.8678862</Y>
</Position>
</Node>
</Nodes>
<Links>
<Link>
<ID>4eb83f93-2d47-4afc-bc46-dfa83a4f1f96</ID>
<Description>Lovers</Description>
<LHS>f9434e21-d471-466f-948b-107f9da58905</LHS>
<RHS>f9434e21-d471-466f-948b-107f9da58906</RHS>
<Direction>Double</Direction>
</Link>
<Link>
<ID>4eb83f93-2d47-4afc-bc46-dfa83a4f1f97</ID>
<Description>Knows</Description>
<LHS>f9434e21-d471-466f-948b-107f9da58905</LHS>
<RHS>f9434e21-d471-466f-948b-107f9da58907</RHS>
<Direction>Single</Direction>
</Link>
</Links>
</Structure>
</Structures>
</Project>
这个文件可以通过以下几行python转换为SVG:
import xml.etree.ElementTree
import graphviz
tree = xml.etree.ElementTree.parse('example.xml')
root = tree.getroot()
# read all the structures
for structure in root.findall('.//Structures/Structure'):
structure_name = structure.findtext('./Name')
graph = graphviz.Digraph(format='svg',comment='structure_name')
# read the nodes of the structure
for node in structure.findall('.//Nodes/Node'):
node_element_id = node.findtext('./ElementID')
# find the name
element_name = root.findtext(".//Elements/Element[ID='{}']/Name".format(node_element_id))
graph.node(node_element_id, element_name)
# read the links
for link in structure.findall('.//Links/Link'):
id_1 = link.findtext('./LHS')
id_2 = link.findtext('./RHS')
description = link.findtext('./Description')
direction = link.findtext('./Direction')
graph.edge(id_1, id_2, label=description)
if direction=='Double':
graph.edge(id_2, id_1, label=description)
graph.render(filename=structure_name)
这将创建一个SVG,其结构名称如下所示。
通过在graphviz部分投入更多精力可能看起来更好。
时间表将是另一回事。
答案 1 :(得分:1)
您使用的应用程序之类的应用程序都有自己的自定义XML-Schemata。这意味着应用程序是唯一理解标签含义的东西。将XML解释为图表是应用程序中的自定义实现。
该应用使用此<SaveFormat>3.5</SaveFormat>
来了解如何处理数据。
但是因为它是XML,我们可以使用XSLT将自定义XML转换为另一个应用程序可以理解的XML。这就是XSLT的用途。
听起来很可能。
我们需要一个目标应用程序,并逐步采取措施,使元素显示在那里忽略其余部分。