Trädfiler i MedView. Olof Torgersson

Relevanta dokument
Föreläsning 9 Innehåll

Två fall: q Tom sekvens: () q Sekvens av element: (a b c) ; (sum-rec '(2 4 6)) = 12. q Första elementet uppfyller vissa villkor: (2 a b c)

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Symbolisk data. quote. (define a 1) (define b 2) (jacek johan david) (list a b)

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18

Tentamen, Algoritmer och datastrukturer

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

public boolean containskey(string key) { return search(key, head)!= null; }

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

Datastrukturer i kursen. Föreläsning 8 Innehåll. Träd rekursiv definition. Träd

Inlämningsuppgiften. Föreläsning 9 Innehåll. Träd. Datastrukturer i kursen

Introduktion Schenker-BTL AB, Stab IT Beskrivning över informationsintegreringmed Schenker, metodbeskrivning version 1.

Inom datalogin brukar man använda träd för att beskriva vissa typer av problem. Om man begränsar sig till träd där varje nod förgrenar sig högst två

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

Föreläsning 9 Innehåll

Föreläsning 9 Datastrukturer (DAT037)

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: Tid: (OBS 3 tim) Rum: V

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Optimala koder. Övre gräns för optimala koder. Gränser. Övre gräns för optimala koder, forts.

Optimala koder. Det existerar förstås flera koder som har samma kodordsmedellängd. Enklaste fallet är att bara byta 0:or mot 1:or.

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Tentamen Nätverksprogrammering Lösningsförslag

Tentamen OOP

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Föreläsning 4 Datastrukturer (DAT037)

Tentamen i Algoritmer & Datastrukturer i Java

Vad kännetecknar en god klass. Vad kännetecknar en god klass. F12 Nested & Inner Classes

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Övning 1 - Abstrakta datatyper

Tentamen i Objektorienterad modellering och design Helsingborg

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

Innehåll. Föreläsning 12. Binärt sökträd. Binära sökträd. Flervägs sökträd. Balanserade binära sökträd. Sökträd Sökning. Sökning och Sökträd

LÖSNINGSFÖRSLAG

Statistik över heltal

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12

13 Prioritetsköer, heapar

Föreläsning 2. Länkad lista och iterator

F11 - Rekursion. ID1004 Objektorienterad programmering Fredrik Kilander

Träd - C&P kap. 10 speciellt binära sökträd sid. 452

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Föreläsning 2. Länkad lista och iterator

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Implementering av tabellen. Operationer på tabellen

Lösningsförslag övning 2.

Föreläsning 7. Träd och binära sökträd

Lösningsförslag till exempeltenta 2

Självbalanserande träd AVL-träd. Koffman & Wolfgang kapitel 9, avsnitt 1 2

Obligatorisk uppgift 5

Del A (obligatorisk för alla)

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Programmeringsmetodik DV1 Programkonstruktion 1. Moment 8 Om abstrakta datatyper och binära sökträd

Algoritmer och datastrukturer 2012, fo rela sning 8

Föreläsning 7: Syntaxanalys

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Träd, binära träd och sökträd. Koffman & Wolfgang kapitel 6, avsnitt 1 4

Föreläsning 7. Träd och binära sökträd

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Bedömning av kontrollskrivning, EDA016 Programmeringsteknik

n Detta för att kunna koncentrera oss på n Tal: number? n Symboler: symbol? n Strängar: string? n Tecken: char? n Boolskt: boolean?

Introduktion till integrering av Schenkers e-tjänster. Version 2.0

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Orala slemhinneförändringar i en svensk vuxenpopulation

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren att du har förstått dessa även om detaljer kan vara felaktiga.

Datastrukturer, algoritmer och programkonstruktion (DVA104, HT 2014) Föreläsning 5

Föreläsning 8 Datastrukturer (DAT037)

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

Komponenter med COM (och COM+/VC++ 7.0)

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Tentamen i Grundläggande Programvaruutveckling, TDA548

Arrayer med primitiva datatyper

Programmering för språkteknologer II, HT2014. Rum

Träd. Rot. Förgrening. Löv

Svaret kan ges i Javakod (eller i UML-klassdiagram). public class A { B minb;... } public class B { <B:s många variabler och metoder> } Lösning:

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Lösningsförslag till tentamen Datastrukturer, DAT037 (DAT036), Tiden det tar att utföra en iteration av loopen är oberoende av värdet på

Föreläsning 13. Träd

Objektorienterad Programmering (OOP) Murach s: kap 12-16

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

TDIU01 Programmering i C++

Generiska konstruktioner. Kursbokens kapitel 13

Programmering i C++ EDA623 Dynamiska datastrukturer. EDA623 (Föreläsning 11) HT / 31

Tentamen Grundläggande programmering

TENTAMEN OOP

Dugga Datastrukturer (DAT036)

public static void mystery(int n) { if (n > 0){ mystery(n-1); System.out.print(n * 4); mystery(n-1); } }

Föreläsning 7 Datastrukturer (DAT037)

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Algoritmer och datastrukturer 2012, föreläsning 6

Tentamen FYTA11 Javaprogrammering

Programmering i C++ EDA623 Något om C# EDA623 (Föreläsning 14) HT / 17

Klasser och objekt. Henrik Johansson. August 20, 2008

ID1004 Laboration 4, November 2012

Föreläsning Datastrukturer (DAT036)

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Transkript:

Trädfiler i MedView Olof Torgersson 1 Inledning I MedView [1] används ett textbaserat datalagringsformat kallat trädfiler. Formatet designades ursprungligen som ett sätt att lagra en stor mängd dokument med gemensam struktur men varierande detaljinnehåll. Varje dokument kan även betraktas som en partiell induktiv definition [3]. I samband med utformandet av trädfilsformatet byggdes även en objektmodell i Objective-C som tillät enklare analys av data utifrån ett definitionellt arbetssätt. Denna låg bl a till grund för Kuben [2]. Även andra arbeten som Gisela [4] och dagens Java-baserade MedView [cite] har fortsatt att använda trädfiler som datalagringsformat. Trots detta saknas en ordentlig beskrivning vilket är orsaken till detta dokument. För att göra detta krävs först en diskussion om de abstraktioner som används. 2 Kliniska undersökningar I MedView modelleras kliniska undersökningar hierarkiskt som induktiva definitioner. Utifrån grundbegreppet Undersökning beskrivs de olika delar en undersökning omfattar. Om en undersökning består av delarna Patientuppgifter, Anamnes, Status, Diagnos och Daganteckning, ger detta upphov till ekvationerna: Undersökning = Patientuppgifter Undersökning = Anamnes Undersökning = Status Undersökning = Diagnos Undersökning = Daganteckning Därefter beskrivs de olika delarna varför sig. T ex så kanske Patientuppgifter innehåller uppgifter om vem som skickat patienten (Ref-in) och varför (Ref-cause). Dessutom sparas patientens id-nummer och födelseland. Beskrivningen av detta blir Patientuppgifter = P-code Patientuppgifter = Ref-in Patientuppgifter = Ref-cause Patientuppgifter = Born Beskrivningen så långt är gemensam för alla undersökningar som använder samma protokoll. En specifik instans skapas genom att värden anges för de termer som förekommer i undersökningsbeskrivningen: 1

P-code = G10019221 Ref-in = Tandläkare Ref-cause = Slemhinneförändring Born = Sverige Inmatning av data enligt ett visst protokoll sker genom att protokollet läses in i ett därtill anpassat verktyg. Det kan t ex se ut som i figur 1. I princip kan strukturen ha en godtyckligt djup nästningsnivå, även om Java-MedView idag (juli 2004) bara stödjer två nivåer. Figure 1: Inmatning av data i MedRecords. 3 Data som träd Den induktiva definition som skapas då undersökningsdata matas in kan också beskrivas som ett träd med godtyckligt antal grenar för varje nod. I detta fall utgör Undersökning trädets rot. I exemplet ovan är Patientuppgifter, Anamnes, Status, Diagnos och Daganteckning, direkta barn till Undersökning. P-code, Ref-in, Ref-cause och Ref-cause barn till Patientuppgifter och de undersökningsspecifika värdena (G10019221, Tandläkare,...) trädets löv. 3.1 Begrepp I trädfiler används begreppen nod och löv på ett sätt som avviker en aning från standardterminologin för träd. Nod: Alla noder i trädet som är en del av den gemensamma strukturen för alla undersökningar kallas för noder. I exemplet, allt utom värdena G10019221, Tandläkare, Slemhinneförändring, Sverige. 2

Löv: De specifika värden som matas in vid en undersökning och alltså inte ingår i den generella strukturen. Det som är speciellt är att en nod inte måste ha några barn. T ex så kan Born sakna värde. Lövet, t ex Sverige, finns då inte men Born är ändå en nod. Den generella strukturen illustreras i figur 2. Löv är markerade som fyrkanter, noder som ovaler. Figure 2: Undersökningsdata som träd. 3.2 Speciella noder Varje trädfil innehåller två speciella noder Datum och Konkret_identifikation. Dessa är placerade direkt under roten Undersökning. Datum, som finns med i figur reffig:sampletree, är den tidpunkt då undersökningen gjordes. Formatet ska vara yyyymm-dd hh:mm:ss. Konkret_identifikation finns med av historiska skäl och kan i princip vara vad som helst. Ett lämpligt val är trädfilens namn. 3.3 Namngivning och teckenkodning En trädfil känns igen på sin extension.tree. Trädfiler måste namnges på ett sätt som gör att de får ett unikt namn för att förhindra att data förloras. I MedView används för närvarande P-code tidpunkt.tree, t ex G10019221_031229120954.tree. Programvara som läser trädfiler ska kunna läsa data oberoende av filnamnet så länge extensionen är.tree. Viss optimering kan dock göras om filnamnet inleds med P-code. Teckenkodning: Trädfiler ska sparas med teckenkodningen ISO Latin 1. 3

3.4 Format Trädroten Undersökning finns inte explicit representerad i en trädfil. Istället inleds varje trädfil med en rad som ursprungligen var tänkt att identifiera undersökningen. Idag har denna förlorat sin betydelse men av kompabilitetsskäl ska varje trädfil inledas med raden yymmddhhmmss, t ex 031229120954 Därefter följer en kodning av det representerade trädet som gör det möjligt att bygga upp det via en genomlöpning av trädfilen. Den generella formen på innehållet är en följd av enheter på formen (N L)Str(# ). Varje enhet representar en nod eller ett löv i trädet. Första tecknet i varje enhet står på början av en ny rad. Noder börjar med N och löv med L. Noder innehåller inga radbrytningar. Löv däremot kan innehålla strängar med nyradstecken. Sist i varje enhet står 0 eller flera # -tecken. Ett löv avslutas alltid med minst ett # -tecken. Noder däremot kan avslutas med nyradstecken och sakna avslutande #. Observera att tomma löv inte skrivs ut 3.5 Tolkning Brädgårdarna som avslutar enheter används som navigationsanvisning då en trädfil läses. Varje # betyder att man ska förflytta sig ett steg uppåt från aktuell plats för att hitta rätt ställe att lägga in nästa enhet i trädet. Delträdet för Patientuppgifter i figur 2 blir: NPATIENTUPPGIFTER NP-code LG10019221## NRef-in LTandläkare## NRef-cause LSlemhinneförändring# LSjögrensutredning## NBorn LDanmark## NNote01## 4 Exempelkod Kod för att läsa och skriva trädfiler finns i MedViews CVS. Nedan följer i princip koden från klassen Tree.java i paketet medview.datahandling.examination.tree. Värdet i noden finns som en sträng i instansvariabeln value. public String tostring() { if (isleaf()) return leaftostring(); else 4

return branchtostring(); private String branchtostring() { StringBuffer buffer = new StringBuffer(); buffer.append( value ); for (java.util.iterator it = getchildreniterator(); it.hasnext();) { Tree nextchild = (Tree) it.next(); if (nextchild.isleaf()) { String leafstring = nextchild.tostring(); // "" or "Value#" if (!leafstring.trim().equals("")) { // not "" buffer.append("\nl"); // Leaf marking buffer.append(leafstring); // "Value" else { buffer.append("\nn"); // Node marking buffer.append( (nextchild.tostring())); buffer.append("#"); return buffer.tostring(); private String leaftostring() { if (value!= null &&!value.trim().equals("")) { return ( value + "#"); return ""; // Don t write this leaf out since it is empty. Revisionshistoria Denna version: 04-08.24 Första version: 04-01-02 Ursprunglig författare: Olof Torgersson Att göra Det saknas redogörelse för format på P-code, filstrukturen i en.mvd -struktur och namngivning av bilder. 5

References [1] Y. Ali, G. Falkman, L. Hallnäs, M. Jontell, N. Nazari, and O. Torgersson. MedView: Design and adoption of an interactive system for oral medicine. In A. Hasman, B. Blobel, J. Dudeck, R. Engelbrecht, G. Gell, and H.-U. Prokosch, editors, Medical Infobahn for Europe. Proceedings of MIE 2000, volume 77 of Stud. Health Tech. Inform., pages 3 7. IOS Press, 2000. [2] G. Falkman. Information visualization in clinical odontology: Multidimensional analysis and interactive data exploration. Artif. Intell. Med., 22(2):133 158, 2001. [3] L. Hallnäs. Partial inductive definitions. Theor. Comput. Sci., 87(1):115 142, 1991. [4] O. Torgersson. Declarative programming and clinical medicine: On the use of Gisela in the MedView project. In S. Krishnamurthi and C. R. Ramakrishnan, editors, Practical Aspects of Declarative Languages. Proceedings of PADL 2002, volume 2257 of Lect. Notes Comput. Sci., pages 64 81. Springer-Verlag, 2002. 6