How would you design a tool to specify deeply nested forms, basically a complex decision tree, eg for medical diagnosis or complex tax stuff etc, where future form elements can dependent on a previously specified one, but statically ie chosen from few option not generated via a function so that all options and branches are known without executing code. The form specification should just be declarative, data. What data structure would you use to represent that form (I think it would basically be a DAG)? What language would you write it in? How would you generate a graphical representation (eg converting to .dot)? How would you generate a fillable form from it?
Your question is a bit vague but it looks to me that what you want is some sort of expert system of inference engine.
There might be some open source solutions, and there’s always the GNU Prolog language that might suit your needs.
I suspect that you won’t get a graphviz structure out of it though.
Is this a homework assignment?
I don’t know how many answers you are going to get, but I suspect not many. You’re asking someone to architect a solution without any requirements. Even if that weren’t a massive ask, it’s pretty much impossible because you haven’t provided any information.
First half: I’d write a guided wizard with a state machine.
Data structure? You mean schema? Depends on what the data is, how it’s related, and how it will be used. The answer could be anything from 30 SQL tables to a big blob of JSON.
Best language? The one(s) you know.
Graphical representation? I’ve been doing this for 25 years and never used a .dot. Is that a Word template? I can tell you I definitely wouldn’t use that but maybe someone else would tell you different. I’ve only had to produce a word document a couple of times and I used Java & POI to do it (C# could probably do it easier I’d hazard a guess) but if that’s not a requirement I’d use a browser interface.
Generating a fillable form? Like I say I’d make a wizard using some kind of web framework.
Good luck. Hopefully someone else understands your needs better than I do and can give you a better answer.
Just in case you might find it interesting: https://en.wikipedia.org/wiki/DOT_(graph_description_language)
Thank you. Turns out I have seen that before. I played with Graphviz for a couple of months. It was fun but ultimately fruitless for my needs at the time. Thank you for reminding me.
I don’t have the vision of how that would apply to this project. Perhaps to visualize the current workflow, but it feels like it would be easier to do it by hand unless it’s constantly changing.
Yeah I had a similar feel.
You’re describing what Oracle Intelligent Advisor (OIA) tries to deliver with their interviews. After you write your code, an interview can be automatically generated which collects data and infers which questions need to be asked based on previous answers. For data representation, it is unfortunately either captured in Microsoft Word or within their interview screens as logic, which does not meet your graphical representation needs. It seemed to be close enough that I thought it worth mentioning. It’s original use case was for tax purposes but I use it professionally to determine eligibility to public assistance programs.
Similar to @steph’s answer ErgoAI is a prolog derivative with a syntax rather similar to .dot (from what I gather). This tool would capture the data in a format you like, but does not generate a fillable form for you, but I believe it could be made to do so in a manner similar to OIA above.