<feed xmlns="http://www.w3.org/2005/Atom" xmlns:cc="http://web.resource.org/cc/">
	<title>List of Class [text.Baldanders.info]</title>
	<link rel="alternate" type="text/html" href="https://text.baldanders.info/tags/class/" />
	<link rel="self" type="application/atom+xml" href="https://text.baldanders.info/tags/class/index.xml" />
	<id>tag:text.Baldanders.info,2019-07-14:/tags</id>
	<updated>2019-07-14T16:28:21+09:00</updated>
	<subtitle>帰ってきた「しっぽのさきっちょ」</subtitle>
	<icon>https://text.baldanders.info/images/avatar.jpg</icon>
	<logo>https://text.baldanders.info/images/avatar.jpg</logo>

	<entry>
		<title>真面目に PlantUML (4) : 実体関連図</title>
		<link rel="alternate" type="text/html" href="https://text.baldanders.info/remark/2019/07/plantuml-4-entity-relationship-diagrams/" />
		<id>tag:text.Baldanders.info,2019-07-14:/remark/2019/07/plantuml-4-entity-relationship-diagrams/</id>
		<published>2019-07-14T07:28:21+00:00</published>
		<updated>2026-05-17T05:32:22+00:00</updated>
		<summary>実は実体関連図は UML のクラス図を使って表すことができる。また IE 記法にも一部対応している。</summary>
		<author>
			<name>Spiegel</name>
			<uri>https://baldanders.info/profile/</uri>
		</author>
		
	<link rel="cc:license" type="application/rdf+xml" href="https://creativecommons.org/licenses/by-sa/4.0/rdf" />


		<content type="html" xml:lang="ja-jp" xml:base="https://text.baldanders.info/">&lt;p&gt;今回は実体関連図（entity-relationship diagram）について。&lt;/p&gt;
&lt;p&gt;実体関連モデル（entity-relationship model）は関係データベース（relational database）を抽象的に表現する手法のひとつで，実体関連モデルを図で表したものが実体関連図である。&lt;/p&gt;
&lt;p&gt;実体関連モデルのうち特に物理データモデルを表した実体関連図は関係データベースの実装とよくマッチしているため，関係データベースのスキーマ設計でよく使われ，逆に関係データベースのスキーマを実体関連図に逆コンパイルするリバースエンジニアリング・ツールもある。&lt;/p&gt;
&lt;p&gt;では実体関連図の記法について紹介してみよう。&lt;/p&gt;
&lt;h2&gt;目次&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://text.baldanders.info/remark/2018/12/plantuml-1/&#34; target=&#34;_blank&#34;&gt;PlantUML のインストール&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://text.baldanders.info/remark/2018/12/plantuml-2-sequence-diagram/&#34; target=&#34;_blank&#34;&gt;シーケンス図&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://text.baldanders.info/remark/2018/12/plantuml-3-class-diagrams/&#34; target=&#34;_blank&#34;&gt;クラス図&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://text.baldanders.info/remark/2019/07/plantuml-4-entity-relationship-diagrams/&#34; target=&#34;_blank&#34;&gt;実体関連図&lt;/a&gt; ← イマココ&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;UML の&lt;a href=&#34;https://text.baldanders.info/remark/2018/12/plantuml-3-class-diagrams/&#34; target=&#34;_blank&#34; title=&#34;真面目に PlantUML (3) : クラス図&#34;&gt;クラス図&lt;/a&gt;を使った記法&lt;/h2&gt;
&lt;p&gt;実体関連モデルは以下の3つの要素で表すことができる。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;実体（entity）&lt;/li&gt;
&lt;li&gt;関連（relationship）&lt;/li&gt;
&lt;li&gt;属性（attribute）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;「実体」同士の関係は「関連」で表すことができる。
また「実体」および「関連」はそれぞれ「属性」を持つことができる。&lt;/p&gt;
&lt;p&gt;これを見てピンとくる方もいるだろうが，実は実体関連図は UML の&lt;a href=&#34;https://text.baldanders.info/remark/2018/12/plantuml-3-class-diagrams/&#34; target=&#34;_blank&#34; title=&#34;真面目に PlantUML (3) : クラス図&#34;&gt;クラス図&lt;/a&gt;を使って表すことができる。
「実体」を表すのがクラスであり，クラス同士を繋いだ関係線が「関連」に相当する。
たとえばこんな感じ。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;@startuml
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;class &amp;#34;Entity A&amp;#34; as A {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  {field} id : int &amp;lt;&amp;lt;PK&amp;gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  {field} name : string
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  {field} location : string
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;class &amp;#34;Entity B&amp;#34; as B {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  {field} subid : int &amp;lt;&amp;lt;PK&amp;gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  {field} id : int &amp;lt;&amp;lt;PK,FK&amp;gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  {field} subname : string
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;A &amp;#34;1&amp;#34; &amp;lt;.left. &amp;#34;0..n&amp;#34; B : more info &amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;@enduml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;figure style=&#39;margin:0 auto;text-align:center;&#39;&gt;&lt;a href=&#34;./entity-relationship-1.puml&#34;&gt;&lt;img src=&#34;./entity-relationship-1.png&#34; srcset=&#34;./entity-relationship-1.png 973w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;これで &lt;code&gt;Entity B&lt;/code&gt; が &lt;code&gt;Entity A&lt;/code&gt; の依存エンティティであることが分かる（これに対して外部キーを含まない &lt;code&gt;Entity A&lt;/code&gt; を独立エンティティと呼ぶ）。
またステレオタイプを使って &lt;code&gt;PK&lt;/code&gt; や &lt;code&gt;FK&lt;/code&gt; を表現している。
更に多重度をつかって関連の「濃度（cardinality）」も表現できる。
更に更に &lt;a href=&#34;http://plantuml.com/&#34; target=&#34;_blank&#34; title=&#34;Open-source tool that uses simple textual descriptions to draw UML diagrams.&#34;&gt;PlantUML&lt;/a&gt; におけるクラスの属性はかなりアドホックな記述ができるため初期値や &lt;code&gt;NOT NULL&lt;/code&gt; 制約のような付属情報も追記できるだろう。&lt;/p&gt;
&lt;h2&gt;IE (Information Engineering) 記法&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;http://plantuml.com/&#34; target=&#34;_blank&#34; title=&#34;Open-source tool that uses simple textual descriptions to draw UML diagrams.&#34;&gt;PlantUML&lt;/a&gt; は IE 記法にも一部対応している。
たとえばこんな感じ。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;@startuml
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;entity &amp;#34;Entity A&amp;#34; as A {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  id : int
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  name : string
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  location : string
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;entity &amp;#34;Entity B&amp;#34; as B {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  subid : int
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  id : int &amp;lt;&amp;lt;FK&amp;gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  subname : string
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;A ||.right.o{ B : more info &amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;@enduml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;figure style=&#39;margin:0 auto;text-align:center;&#39;&gt;&lt;a href=&#34;./entity-relationship-2.puml&#34;&gt;&lt;img src=&#34;./entity-relationship-2.png&#34; srcset=&#34;./entity-relationship-2.png 973w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;実体の属性は &lt;code&gt;--&lt;/code&gt; や &lt;code&gt;==&lt;/code&gt; や &lt;code&gt;..&lt;/code&gt; を使って任意に仕切ることができるが，通常は2つに分けて上半分を主キー属性，下半分を非キー属性とする。&lt;/p&gt;
&lt;p&gt;関連を示す線は “Crow&amp;rsquo;s Foot” と呼ばれる記法で &lt;a href=&#34;http://plantuml.com/&#34; target=&#34;_blank&#34; title=&#34;Open-source tool that uses simple textual descriptions to draw UML diagrams.&#34;&gt;PlantUML&lt;/a&gt; では&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Entity01 }|..|| Entity02
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Entity03 }o..o| Entity04
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Entity05 ||--o{ Entity06
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Entity07 |o--|| Entity08
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;figure style=&#39;margin:0 auto;text-align:center;&#39;&gt;&lt;a href=&#34;./crows-foot.puml&#34;&gt;&lt;img src=&#34;./crows-foot.png&#34; srcset=&#34;./crows-foot.png 1140w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;という感じに記述して濃度を表現する。
これは多重度表現の&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Entity01 &amp;#34;1..n&amp;#34; .. &amp;#34;1&amp;#34; Entity02
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Entity03 &amp;#34;0..n&amp;#34; .. &amp;#34;0,1&amp;#34; Entity04
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Entity05 &amp;#34;1&amp;#34; -- &amp;#34;0..n&amp;#34; Entity06
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Entity07 &amp;#34;0,1&amp;#34; -- &amp;#34;1&amp;#34; Entity08
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;figure style=&#39;margin:0 auto;text-align:center;&#39;&gt;&lt;a href=&#34;./multiplicity.puml&#34;&gt;&lt;img src=&#34;./multiplicity.png&#34; srcset=&#34;./multiplicity.png 1140w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;と同等である。&lt;/p&gt;
&lt;p&gt;なお &lt;a href=&#34;http://plantuml.com/&#34; target=&#34;_blank&#34; title=&#34;Open-source tool that uses simple textual descriptions to draw UML diagrams.&#34;&gt;PlantUML&lt;/a&gt; では IE 記法の依存エンティティを表現できない。
したがって先ほどの&lt;/p&gt;
&lt;figure style=&#39;margin:0 auto;text-align:center;&#39;&gt;&lt;a href=&#34;./entity-relationship-2.puml&#34;&gt;&lt;img src=&#34;./entity-relationship-2.png&#34; srcset=&#34;./entity-relationship-2.png 973w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;において &lt;code&gt;Entity A&lt;/code&gt; と &lt;code&gt;Entity B&lt;/code&gt; のどちらが依存エンティティなのか分かりにくい（まぁ属性を見れば分かるけど）。
独立エンティティと依存エンティティを明示的に区別したいのであれば，苦肉の策ではあるが UML の&lt;a href=&#34;https://text.baldanders.info/remark/2018/12/plantuml-3-class-diagrams/&#34; target=&#34;_blank&#34; title=&#34;真面目に PlantUML (3) : クラス図&#34;&gt;クラス図&lt;/a&gt;と IE 記法を混ぜて&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;@startuml
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;entity &amp;#34;Entity A&amp;#34; as A {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  id : int
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  name : string
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  location : string
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;entity &amp;#34;Entity B&amp;#34; as B {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  subid : int
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  id : int &amp;lt;&amp;lt;FK&amp;gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  subname : string
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;A &amp;#34;1&amp;#34; &amp;lt;.left. &amp;#34;0..n&amp;#34; B : more info &amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;@enduml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;figure style=&#39;margin:0 auto;text-align:center;&#39;&gt;&lt;a href=&#34;./entity-relationship-3.puml&#34;&gt;&lt;img src=&#34;./entity-relationship-3.png&#34; srcset=&#34;./entity-relationship-3.png 973w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;などとするのがいいかもしれない。
その辺はお好みで。&lt;/p&gt;
&lt;h2&gt;ブックマーク&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;http://plantuml.com/ie-diagram&#34; target=&#34;_blank&#34;&gt;Entity Relationship diagram syntax and features&lt;/a&gt; : 公式ドキュメント&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://medium.com/veltra-engineering/how-to-draw-er-diagram-with-plantuml-86ec2095645e&#34; target=&#34;_blank&#34;&gt;PlantUMLでER図を描く！ - VELTRA Engineering - Medium&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://qiita.com/genzouw/items/23cd0119715403e6e110&#34; target=&#34;_blank&#34;&gt;ER図を書くのに疲れたら - Qiita&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/achiku/planter&#34; target=&#34;_blank&#34;&gt;GitHub - achiku/planter: Generate PlantUML ER diagram textual description from PostgreSQL tables&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/spiegel-im-spiegel/plantuml-sample&#34; target=&#34;_blank&#34;&gt;GitHub - spiegel-im-spiegel/plantuml-sample: Samples for PlantUML&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content>
	</entry><entry>
		<title>真面目に PlantUML (3) : クラス図</title>
		<link rel="alternate" type="text/html" href="https://text.baldanders.info/remark/2018/12/plantuml-3-class-diagrams/" />
		<id>tag:text.Baldanders.info,2018-12-29:/remark/2018/12/plantuml-3-class-diagrams/</id>
		<published>2018-12-29T09:11:06+00:00</published>
		<updated>2020-10-17T02:56:10+00:00</updated>
		<summary>今回はクラス図について。 オブジェクト図やパッケージ図までだどりつけなかった orz</summary>
		<author>
			<name>Spiegel</name>
			<uri>https://baldanders.info/profile/</uri>
		</author>
		
	<link rel="cc:license" type="application/rdf+xml" href="https://creativecommons.org/licenses/by-sa/4.0/rdf" />


		<content type="html" xml:lang="ja-jp" xml:base="https://text.baldanders.info/">&lt;p&gt;今回はクラス図（class diagram）について。
クラス図はシステムの構成要素であるクラスを定義しクラス同士の関係を表現したものである。&lt;/p&gt;
&lt;h2&gt;目次&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://text.baldanders.info/remark/2018/12/plantuml-1/&#34; target=&#34;_blank&#34;&gt;PlantUML のインストール&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://text.baldanders.info/remark/2018/12/plantuml-2-sequence-diagram/&#34; target=&#34;_blank&#34;&gt;シーケンス図&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://text.baldanders.info/remark/2018/12/plantuml-3-class-diagrams/&#34; target=&#34;_blank&#34;&gt;クラス図&lt;/a&gt; ← イマココ&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://text.baldanders.info/remark/2019/07/plantuml-4-entity-relationship-diagrams/&#34; target=&#34;_blank&#34;&gt;実体関連図&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;クラスの定義&lt;/h2&gt;
&lt;p&gt;まずはクラスの定義から。&lt;/p&gt;
&lt;p&gt;クラスはひとつの「名前」，0個以上の「属性」，0個以上の「操作」で構成され，以下のように表す。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-puml&#34; data-lang=&#34;puml&#34;&gt;@startuml

hide circle

class &amp;#34;Class Name&amp;#34; as Class {
  {field} Attributes
  {method} Operations
}

@enduml
&lt;/code&gt;&lt;/pre&gt;&lt;figure style=&#39;margin:0 auto;text-align:center;&#39;&gt;&lt;a href=&#34;./declare-class.puml&#34;&gt;&lt;img src=&#34;./declare-class.png&#34; srcset=&#34;./declare-class.png 500w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;抽象クラスの場合は「名前」をイタリック（または斜体）で表す。
&lt;a href=&#34;http://plantuml.com/&#34; target=&#34;_blank&#34; title=&#34;Open-source tool that uses simple textual descriptions to draw UML diagrams.&#34;&gt;PlantUML&lt;/a&gt; では &lt;code&gt;abstract&lt;/code&gt; を付けることで抽象クラスとして扱われる。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-puml&#34; data-lang=&#34;puml&#34;&gt;@startuml

hide circle

abstract class &amp;#34;Abstract Class&amp;#34; as Class1
abstract class &amp;#34;Interface Class&amp;#34; as Class2  &amp;lt;&amp;lt;interface&amp;gt;&amp;gt;

@enduml
&lt;/code&gt;&lt;/pre&gt;&lt;figure style=&#39;margin:0 auto;text-align:center;&#39;&gt;&lt;a href=&#34;./declare-abstract-class.puml&#34;&gt;&lt;img src=&#34;./declare-abstract-class.png&#34; srcset=&#34;./declare-abstract-class.png 784w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;&amp;lt;interface&amp;gt;&amp;gt;&lt;/code&gt; はステレオタイプ（stereotype）と呼ばれているもので，ここではクラスの種別を表している。&lt;/p&gt;
&lt;p&gt;なお &lt;a href=&#34;http://plantuml.com/&#34; target=&#34;_blank&#34; title=&#34;Open-source tool that uses simple textual descriptions to draw UML diagrams.&#34;&gt;PlantUML&lt;/a&gt; ではアイコンを使ってクラス種別を表現できる。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-puml&#34; data-lang=&#34;puml&#34;&gt;@startuml

show circle

class ImplementClass
abstract class AbstractClass
interface InterfaceClass
enum Enum {
  ONE
  TWO
  THREE
}
annotation Annotation
class CustomClass &amp;lt;&amp;lt; (S,orchid) custom &amp;gt;&amp;gt;

@enduml
&lt;/code&gt;&lt;/pre&gt;&lt;figure style=&#39;margin:0 auto;text-align:center;&#39;&gt;&lt;a href=&#34;./classes.puml&#34;&gt;&lt;img src=&#34;./classes.png&#34; srcset=&#34;./classes.png 1429w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;最後の CustomClass ではアイコンをカスタムで指定している。&lt;/p&gt;
&lt;!--
## 名前とパッケージ

UML ではクラスの「名前」を

```text
パッケージ名:クラス名
```

で表記する。
ただしパッケージ名は省略可能。

[PlantUML] では “`.`” をデリミタとしてパッケージとクラス名を分離することもできる。

```puml
@startuml

hide circle

Package2.Class1 -|&gt; Package1.BaseClass
Package2.Class1 *-- Package2.Class2

Package1.BaseClass &lt;|-- Package3.Class1
Package3.Class1 *- Package3.Class2

@enduml
```

&lt;figure style=&#39;margin:0 auto;text-align:center;&#39;&gt;&lt;a href=&#34;./package.puml&#34;&gt;&lt;img src=&#34;./package.png&#34; srcset=&#34;./package.png 1059w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;/figure&gt;
--&gt;
&lt;h3&gt;属性（attribute），操作（operation），可視性（Visibility）&lt;/h3&gt;
&lt;p&gt;UML ではクラス内の「属性」を以下のように表記する。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;可視性 名前:型 [=初期値] {制約条件}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;「操作」も同じように&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;可視性 名前([引数の名前:引数の型[, ...]]) : 戻り値の型
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;と表記する。&lt;/p&gt;
&lt;p&gt;「可視性」は属性・操作にアクセスできるスコープを示し，以下の記号で表す。&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;可視性&lt;/th&gt;
					&lt;th&gt;スコープ&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;+&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;Private&lt;/strong&gt; 自クラスでのみアクセス可能&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;-&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;Public&lt;/strong&gt; 全てのパッケージ・クラスでアクセス可能&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;#&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;Protected&lt;/strong&gt; 自クラスとその派生クラスでアクセス可能&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;~&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;Package Protected&lt;/strong&gt; 同じパッケージ内でアクセス可能&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;a href=&#34;http://plantuml.com/&#34; target=&#34;_blank&#34; title=&#34;Open-source tool that uses simple textual descriptions to draw UML diagrams.&#34;&gt;PlantUML&lt;/a&gt; では以下のように記述する。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-puml&#34; data-lang=&#34;puml&#34;&gt;@startuml

hide circle
skinparam classAttributeIconSize 0

class ClassName {
  {field} + publicField : String = &amp;#34;string&amp;#34; {read only}
  {field} - privatefield : int
  {field} # protectedfield : double
  {field} ~ protectedfieldInPackage : Object

  {method} + publicMethod(s : String, v : int) : void
  {method} - privateMethod() : int
  {method} # protectedMethod() : double
  {method} ~ protectedMethodInPackage() : Object
}

@enduml
&lt;/code&gt;&lt;/pre&gt;&lt;figure style=&#39;margin:0 auto;text-align:center;&#39;&gt;&lt;a href=&#34;./members1.puml&#34;&gt;&lt;img src=&#34;./members1.png&#34; srcset=&#34;./members1.png 787w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;さらに &lt;code&gt;classAttributeIconSize&lt;/code&gt; を指定して可視性の部分をアイコン化することもできる。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-puml&#34; data-lang=&#34;puml&#34;&gt;@startuml

show circle
skinparam classAttributeIconSize 10

class ClassName {
  {field} + publicField : String = &amp;#34;string&amp;#34; {read only}
  {field} - privatefield : int
  {field} # protectedfield : double
  {field} ~ protectedfieldInPackage : Object

  {method} + publicMethod(s : String, v : int) : void
  {method} - privateMethod() : int
  {method} # protectedMethod() : double
  {method} ~ protectedMethodInPackage() : Object
}

@enduml&lt;/code&gt;&lt;/pre&gt;
&lt;figure style=&#39;margin:0 auto;text-align:center;&#39;&gt;&lt;a href=&#34;./members2.puml&#34;&gt;&lt;img src=&#34;./members2.png&#34; srcset=&#34;./members2.png 806w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;h3&gt;クラス変数，クラス・メソッド&lt;/h3&gt;
&lt;p&gt;クラス変数やクラス・メソッドはアンダーラインで表す。
&lt;a href=&#34;http://plantuml.com/&#34; target=&#34;_blank&#34; title=&#34;Open-source tool that uses simple textual descriptions to draw UML diagrams.&#34;&gt;PlantUML&lt;/a&gt; では &lt;code&gt;static&lt;/code&gt; または &lt;code&gt;classifier&lt;/code&gt; を付けることでクラス変数やクラス・メソッドであることを示す。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-puml&#34; data-lang=&#34;puml&#34;&gt;@startuml

hide circle
skinparam classAttributeIconSize 0

class ClassName {
  {classifier} {field} + staticField : String = &amp;#34;string&amp;#34; {read only}
  {classifier} {method} + staticMethod() : void
}

@enduml
&lt;/code&gt;&lt;/pre&gt;&lt;figure style=&#39;margin:0 auto;text-align:center;&#39;&gt;&lt;a href=&#34;./members3.puml&#34;&gt;&lt;img src=&#34;./members3.png&#34; srcset=&#34;./members3.png 767w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;h3&gt;抽象メソッド&lt;/h3&gt;
&lt;p&gt;抽象メソッドはイタリック（または斜体）で表す。
&lt;a href=&#34;http://plantuml.com/&#34; target=&#34;_blank&#34; title=&#34;Open-source tool that uses simple textual descriptions to draw UML diagrams.&#34;&gt;PlantUML&lt;/a&gt; では &lt;code&gt;abstract&lt;/code&gt; を付けることで抽象メソッドであることを示す。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-puml&#34; data-lang=&#34;puml&#34;&gt;@startuml

hide circle
skinparam classAttributeIconSize 0

class ClassName {
  {abstract} {method} + abstractMethod() : void
}

@enduml
&lt;/code&gt;&lt;/pre&gt;&lt;figure style=&#39;margin:0 auto;text-align:center;&#39;&gt;&lt;a href=&#34;./members4.puml&#34;&gt;&lt;img src=&#34;./members4.png&#34; srcset=&#34;./members4.png 500w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;a href=&#34;http://plantuml.com/&#34; target=&#34;_blank&#34; title=&#34;Open-source tool that uses simple textual descriptions to draw UML diagrams.&#34;&gt;PlantUML&lt;/a&gt; はクラス・メンバについてかなりアドホックに記述できるため，とりあえずメモ書きを残しておいて，あとから厳密に決めていくのがいいかも知れない。&lt;/p&gt;
&lt;h2&gt;クラス間の関係&lt;/h2&gt;
&lt;p&gt;クラス間の関係はクラス同士を線で繋いで表すが，線（矢印）の種類によって関係の違いを表現できる。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-puml&#34; data-lang=&#34;puml&#34;&gt;@startuml

hide circle

Class01 &amp;lt;|-- Class02 : Generalization
Class03 &amp;lt;|.. Class04 : Realization
Class05 &amp;lt;.. Class06 : Dependency
Class07 -- Class08 : Association
Class09 o-- Class10 : Aggregation
Class11 *-- Class12 : Composition

@enduml
&lt;/code&gt;&lt;/pre&gt;&lt;figure style=&#39;margin:0 auto;text-align:center;&#39;&gt;&lt;a href=&#34;./relation.puml&#34;&gt;&lt;img src=&#34;./relation.png&#34; srcset=&#34;./relation.png 1982w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;それぞれの意味は以下の通り&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;種別&lt;/th&gt;
					&lt;th&gt;意味&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Generalization&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;汎化&lt;/strong&gt; いわゆる is-a 関係がある&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Realization&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;実現&lt;/strong&gt; interface 型のような抽象クラスとの汎化関係がある&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Dependency&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;依存&lt;/strong&gt; 矢印の相手に対して依存関係がある&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Association&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;関連&lt;/strong&gt; クラス間で関連がある&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Aggregation&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;集約&lt;/strong&gt;  関連の一種で，全体-部分の関係がある&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Composition&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;コンポジション&lt;/strong&gt; 集約の一種だが片方のみでは成り立たないような強い関係を示す&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;多重度（Multiplicity）&lt;/h3&gt;
&lt;p&gt;関連する2つのクラスについて多重度を設定する。
たとえば Class A と Class B の間に 1:多 の関係があるなら&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-puml&#34; data-lang=&#34;puml&#34;&gt;@startuml

hide circle
hide empty members

class &amp;#34;Class A&amp;#34; as A
class &amp;#34;Class B&amp;#34; as B

A &amp;#34;1&amp;#34; -- &amp;#34;*&amp;#34; B : Association

@enduml
&lt;/code&gt;&lt;/pre&gt;&lt;figure style=&#39;margin:0 auto;text-align:center;&#39;&gt;&lt;a href=&#34;./multi.puml&#34;&gt;&lt;img src=&#34;./multi.png&#34; srcset=&#34;./multi.png 500w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;などと記述する。
多重度表記とその意味は以下の通り。&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;多重度&lt;/th&gt;
					&lt;th&gt;意味&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;1つのみ&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;0,1&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;ゼロまたは1つ&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;0..n&lt;/code&gt; or &lt;code&gt;n&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;ゼロ以上多数&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;1..n&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;1以上多数&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;*&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;n&lt;/code&gt; と同じ&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;クラス図を使った設計では多重度の決定が最優先&lt;/h3&gt;
&lt;p&gt;クラス図を使って設計を行う場合は多重度を最優先で考える。
すなわち&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;システムに必要なクラスを列挙する&lt;/li&gt;
&lt;li&gt;関連のあるクラスを線で繋ぐ&lt;/li&gt;
&lt;li&gt;繋がっているクラスについて多重度を決定する&lt;/li&gt;
&lt;li&gt;クラスの種別を決定する&lt;/li&gt;
&lt;li&gt;クラス・メンバを検討する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;という順番で考えていくとよいだろう。&lt;/p&gt;
&lt;h2&gt;ブックマーク&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;http://plantuml.com/class-diagram&#34; target=&#34;_blank&#34;&gt;Class Diagram syntax and features&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://online.visual-paradigm.com/tutorials/class-diagram-tutorial/&#34; target=&#34;_blank&#34;&gt;Class Diagram Tutorial&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;http://www.itsenka.com/contents/development/uml/class.html&#34; target=&#34;_blank&#34;&gt;クラス図(Class Diagram) - UML入門 - IT専科&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://zenn.dev/buchio/articles/b897c0377875043b85db&#34; target=&#34;_blank&#34;&gt;PlantUMLがいつのまにかLolipop表記に対応していた件&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/spiegel-im-spiegel/plantuml-sample&#34; target=&#34;_blank&#34;&gt;spiegel-im-spiegel/plantuml-sample: Samples for PlantUML&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content>
	</entry>
</feed>
