I’ve spent quite a bit of time reading tutorials and docs recently, but when I finally put fingers to keys to solve something I realized that even though I know how to make Prolog calculate the Fibonacci sequence (with memoization!), I don’t really understand how to model some pretty basic data.
I’d like to build a knowledge base of related software systems and their components following Simon Brown’s C4 Model. After I do that, I have all kinds of fun ideas for automatic graph rendering, CHANGELOG generation, migration assistance, querying git repos, etc.
So I’m looking for the best way to describe the basic facts of the architecture.
Here’s my first try at the example system diagram and I think it’s probably way off base:
person(customer, "Personal Banking Customer", "A customer of the bank, with personal bank accounts"). system(internet_banking, "Internet Banking System", "Allows customers to view information about thier bank accounts, and make payments."). system(email, "E-mail System", "The internal Microsoft Exchange e-mail system"). system(mainframe_banking, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transasctions, etc."). connection(customer, internet_banking, "Views account balances, and makes payments using"). connection(internet_banking, email, "Sends e-mail using"). connection(email, customer, "Sends e-mail to"). connection(internet_banking, mainframe_banking, "Gets account information from, and makes payment using").
I’m guessing it should look more like:
…but then my question is how should I add the display name and description text? How should I represent a connection between two system level nodes (which also has descriptive text).
The C4 Model also includes hierarchical relationships (Systems > Containers > Components). How should I model those?
Thanks in advance.