- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前在 graphiz 上设计类似 UML 的图表时遇到问题。问题的原因是它们不完全是 UML 图。主要区别在于我使用缩进来为对象的属性添加层次结构。实现这些特质对我来说有点困难。我想要实现的是:
我通常使用名为record
的节点形状来设计这些图表。当我必须链接两个类似 UML 的图表时,问题就出现了,就像 UML 中的关系,即聚合、关联、组合等。
当我有图表时,我无法与箭头建立关系,因为箭头只从一个节点的随机部分到另一个节点的另一个随机部分。我拥有类似 UML 图表的方式很好,但是关系箭头导致它不是我想要的,因为我希望箭头从一个节点的特定点到另一个节点的特定点另一个节点。
我用来创建这个图的 DOT 代码是这样的:
digraph G {
fontname = "Bitstream Vera Sans"
fontsize = 8
node [
fontname = "Bitstream Vera Sans"
fontsize = 8
shape = "record"
]
edge [
fontname = "Bitstream Vera Sans"
fontsize = 8
]
Person [
label = "{Person \l\l \ age : int\l \ livesIn : City \l \ \ \ sinceYear : int}"
] // \l -new line, \ -indentation
City [
label = "{City \l \ \ name : string}"
]
Person -> City
}
我尝试通过在节点内使用水平线分隔来解决这个问题,即使我不想要这些线。水平线划分使我可以通过使用 ports 使这种特定关系成为可能。 ,但他们自己创造了一个新问题。他们造成的问题是他们去掉了我想要的和在上一张图中有的缩进。我试图绕过箭头问题的方法有效,但又产生了新问题——缩进消失,水平线分割无法隐藏
.
我用来创建这个图表的代码是:
digraph G {
fontname = "Bitstream Vera Sans"
fontsize = 8
node [
fontname = "Bitstream Vera Sans"
fontsize = 8
shape = "record"
penwidth = 0.5
]
edge [
fontname = "Bitstream Vera Sans"
fontsize = 8
]
Person [
label = "{<g0> Person | <g1> age : int | <g2> livesIn : City | <g3> sinceYear : int}"
] // \l -new line, \ -indentation
City [
label = "{<f0> City | <f1> name : string}"
]
Person:<g2> -> City:<f1> [arrowhead = "empty", headlabel = "*"]
}
这些缩进是这种关系的重要组成部分,所以我想知道是否有人知道我可以做些什么来让这些缩进回到图表中以及我可以做些什么来使水平线分割不可见?
如果有人有更好的方法/想法也与我在图 2 和 3 中所做的完全不同,我将不胜感激,这将帮助我实现图 1。
最佳答案
您最初的尝试还不错。我会说使用端口绝对是可行的方法。如果将节点放在集群中,则可以使用集群的边界并隐藏记录节点的边界,从而摆脱那些分隔线。
如您所述,使用反斜杠 \
不再适用于转义空格。解决方法是改用 \
,这将转义空格。作为替代方案,您也可以用 &nnbsp;
替换每个空格。两者都将达到所需的效果。
我做了一些小改动以提高可读性,例如将图形属性放在 graph
block 中而不是图形的根中,并将端口名称重命名为更合理的名称。我还删除了所有未使用的端口。
我得出的最终结果是这样的:
...这是我使用的 DOT 代码:
digraph G {
graph [
compound = true // To clip the head at the cluster border
penwidth = 2 // Make the cluster's borders a bit thicker
rankdir = "LR" // Make the arrow and nodes go from Left to Right
ranksep = 1 // Add a bit more space inbetween nodes
]
node [
color = none // Hide the node's border
fontname = "Bitstream Vera Sans"
height = 0 // Make the node as small as possible (it will grow if it needs more space)
margin = 0 // Remove unneeded whitespace
shape = "record" // So we can use ports
]
edge [
arrowhead = "open"
labelangle = -5 // Place the asteriks closer to the line
labeldistance = 2.5 // Place the asteriks further away from the arrow head
penwidth = 2 // Make the line a bit thicker
]
/* @NOTE: escaping spaces in the label using '\' doesn't work so use ' ' or '\' instead. */
subgraph cluster_Person {
Person [
label = "\N\l | \ \ \ age : int\l | <livesIn> \ \ \ livesIn : City\l | \ \ \ \ \ \ sinceYear : int\l"
]
}
subgraph cluster_City {
City [
label = "<city> \N\l | \ \ \ name : string\l"
]
}
Person:livesIn -> City:city [headlabel = "*", lhead = "cluster_City"] // lhead allows us to point to the cluster's border instead of the node, as long as we add `compound = true` to the graph
}
关于graphviz - 设计 UML 的问题——比如 graphviz 中的图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9251556/
我正在为 Apple Watch Extension 设计 UML 图。我应该如何使用 UML 表示主机应用程序? UML 节点还是 UML 组件?请注意,扩展应用程序和 iPhone 应用程序(主机
UML 类图是描述类及其关系的标准图形符号。 是否有标准的文本符号 (DSL) 来描述相同的内容?不要说 XMI 或 EMF;-) 我认为您可以使用 Corba IDL 来做到这一点,并为类使用接口(
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 2年前关闭。 Improve thi
假设我正在设计一个分布式应用程序: 它由一台主机组成,即公司的前端Web服务(CompanyWS)和一台或多台主机,比如三台,即公司的分布式仓库。每个仓库都是一个 Web 服务 (WarehouseW
是否有任何正式方式表明函数参数是可选的? 例如,在这张图片中: 我想通知您可以填充 nodes_clicked 参数或将其留空。 谢谢。 最佳答案 可选参数在 UML 中没有任何处理,因为它只是编译器
UML 序列图中的垂直矩形表示什么? 例如我想知道绿色箭头指向的矩形的含义。这些矩形的高度有什么意义吗? 最佳答案 垂直矩形表示 执行规范 . 执行规范是对象交互的一部分,表示对象在执行某些事件或只是
像下面用 StarUML 绘制的 UML 状态图 (SD) 中是否允许没有直接转换的状态? State1 不直接参与任何转换,所以我怀疑这在 UML 中是否允许/可取。我认为在我的应用程序中,我实际上
我正在使用 Enterprise Architect 制作 UML 类图(并最终用它生成 PHP5 代码)。我可以为类添加属性。对于每个属性,我可以选择一个构造型:DomainCodedValue、F
我阅读了域模型及其重要性,我有以下疑问: 领域模型可以解决什么样的问题?换句话说,对于每个问题,我应该建立一个域模型吗? 据我所知,领域模型使用类图表示。类图和领域模型之间没有区别吗? 我也想了解词汇
首先,我对 UML 还是很陌生;但是,非常感兴趣并且正在尝试尽可能多地了解它。 话虽如此,我正处于被指示组装“上下文图”的情况。我觉得我好像理解什么是上下文图的概念以及如何创建上下文图,所以我觉得我没
我们在学校学习行为状态图的转换具有语法: list of events [guard condition] / list of actions 但是我在 Internet 上找不到任何使用多个事件进行
在维基百科上,我读到关联关系是实例级别的关系,所以我们谈论的是两个类的对象之间的关系。 当我们实际绘制类图时,为什么要在类元素或块而不是对象上使用关联?还有一些类级别的关系,我们再次使用类元素。由于我
我无法理解 UML 中的限定符是什么。 例如,在扫描的页面中,有一个名为 “SharedRegister”,其中包含“state”和“plateNumber”。 为什么不使用一个名为 SharerRe
大多数嵌入式系统应用程序都是用 C 语言编写的,即非 OOP。但是 UML 是为 OO 设计的。所以我的问题是为什么人们提倡和使用 UML 用于嵌入式系统(和实时嵌入式系统)? 最佳答案 UML 不仅
我们如何在 UML 图中显示一个线程被调用并反过来调用其他线程。这看起来更像是一个工作流。是否可以用 UML 表示 最佳答案 Sequence Diagram应该做的工作。 关于uml - 类图中的线
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 8 年前。 Improve
我有一个关于 uml 组件图的问题:正如我在 Wikipedia 中看到的那样,可以创建我自己的“组件类型”,如 > , >等等。我以为我只能说>和 > ?!这些条目是刻板印象还是什么?我想对像 or
我知道依赖关系是用条纹箭头描述的,例如: Client ----->----> Server 我发现其他关系(关联、组合、聚合)通常需要多重性,但是,我不确定依赖关系是否需要多重性。我应该在上图的两边
我正在尝试创建 UML 图。例如,我有一个带有方法 a() 的类 A 和扩展 A 并覆盖方法 a() 的类 B。是否有任何标准来指示 UML 中的重写方法? 最佳答案 不,对于覆盖父类上的操作的操作没
假设您有一个更大的汽车配置文件的摘录: 现在我想为汽车定义一些约束,比如这些约束状态之一,如果 attrA是 true ,然后 attrB必须是 false像这样使用 OCL: Context UML
我是一名优秀的程序员,十分优秀!