section{* An example ontology for a scholarly paper*} theory scholarly_paper imports "../Isa_DOF" begin doc_class title = short_title :: "string option" <= "None" doc_class subtitle = abbrev :: "string option" <= "None" -- \adding a contribution list and checking that it is cited as well in tech as in conclusion. ? \ doc_class author = email :: "string" orcid :: "string" affiliation :: "string" doc_class abstract = keywordlist :: "string list" <= "[]" principal_theorems :: "thm list" doc_class text_section = main_author :: "author option" <= None fixme_list :: "string list" <= "[]" doc_class introduction = text_section + comment :: string claims :: "thm list" doc_class technical = text_section + definition_list :: "string list" <= "[]" formal_results :: "thm list" text{* A very rough formatting style could be modeled as follows:*} datatype placement = h | t | b | ht | hb doc_class figure = text_section + relative_width :: "string" (* percent of textwidth *) src :: "string" placement :: placement spawn_columns :: bool <= True (* something similar on tables ? Idea: rough abstraction of table attributes in LaTeX *) doc_class example = text_section + comment :: "string" doc_class "conclusion" = text_section + main_author :: "author option" <= None doc_class related_work = "conclusion" + main_author :: "author option" <= None doc_class bibliography = style :: "string option" <= "Some ''LNCS''" text{* Besides subtyping, there is another relation between doc_classes: a class can be a \emph{monitor} to other ones, which is expressed by occurrence in the where clause. While sub-classing refers to data-inheritance of attributes, a monitor captures structural constraints -- the order -- in which instances of monitored classes may occur. The control of monitors is done by the commands: \<^item> monitor \<^item> close_monitor where the automaton of the monitor class is expected to be in a final state. Monitors can be nested. Classes neither directly or via inheritance indirectly mentioned in the monitor are \emph{independent} from a monitor and may occur freely. *} -- \underlying idea: capture the essence of a monitor class as trace. trace would be `predefined id` like `main` in C. \ text{* @{cite bla} *} doc_class article = style_id :: string <= "''LNCS''" version :: "(int \ int \ int)" <= "(0,0,0)" trace :: "(title + subtitle + author+ abstract + introduction + technical + example + conclusion + bibliography) list" where "(title ~~ \subtitle\ ~~ \author\\<^sup>+ ~~ abstract ~~ introduction ~~ \technical || example\\<^sup>+ ~~ conclusion ~~ bibliography)" end