Nada

Föreläsning 7: Tolka XML och HTML, datajuridik

Att tolka XML-filer

Förra föreläsningen beskrev hur man från en BNF-syntax lätt programmerar en automat som kollar att en fil följer syntaxen. Syntaxen för XML ser ut något i den här stilen.
Xml      ::= Starttagg Innehåll Sluttagg
Innehåll ::=     | Xml Innehåll | Tecken Innehåll
Starttagg::= < Namn Attribut >
Sluttagg ::= </ Namn >
Attribut ::=     | Namn=Värde Attribut

Ett namn är en följd av bokstäver och siffror och hophörande start- och sluttaggar bör förstås ha samma namn. Den andra raden beskriver en eventuellt tom följd av valfria tecken och xml-element. När man programmerar motsvarande metod i automaten ersätter man lämpligen slutrekursionen med en slinga.
  static void läsInnehåll() throws Exception          {
    while(true)                                       {
      if(tjuvtitt visar en sluttagg) break            ;
      if(tjuvtitt visar en starttagg) läsXml()        ;
      else Mio.getChar()                              ;}}
Problemet är att man måste tjuvtitta två tecken framåt för att skilja mellan starttagg och sluttagg. Om man vill klara sej med Mio.nextChar() får man ta till tricket att läsa bort vänstervinkeln så fort man ser den för att direkt kunna kolla nästa tecken. Om vi låter Tagg och Namn vara teckenföljder av bokstäver och siffror och Värde vara en godtycklig teckenföljd inom citattecken blir syntaxen så här.
Xml     ::= < Xmlsvans
Xmlsvans::= Tagg Attribut > Mellan / Tagg >
Attribut::=    |Namn=Värde Attribut 
Mellan  ::= <  | < Xmlsvans Mellan | Tecken Mellan
Och då försvinner tjuvtittsproblemet.
  static void läsMellan() throws Exception            {
    while(true)                                       {
      char tkn=Mio.getChar()                          ;	
      if(tkn!='<') continue                           ;
      if(Mio.nextChar()=='/') break                   ;
      else läsXmlsvans()                              ;}}
I java.xml.parsers.* kallas den här rekursiva medåkningen för SAX (simple API for XML). För tyngre bearbetning vill man också bygga upp ett träd av hela XML-filen och det kallas DOM (document object model). Anropet läsXmlsvans() skapar en tom trädnod, till exempel en DefaultMutableTreeNode, som fylls på av läsAttribut(nod) och läsMellan(nod) och slutligen returneras den färdiga noden. Och slingan i läsMellan(nod) skapar och lägger till barnnoder med nod.add(läsXmlsvans()).

Att tolka HTML-filer

Java är det mest webbanpassade programspråket. Inte nog med att all dokumentation om språket och biblioteksklasserna finns på Suns webbplats, följande gäller också.

Datajuridik

Personuppgiftslagen är ganska trögläst men det är absolut nödvändigt att känna till vad den säger. PUL gäller inte bara personregister utan även e-post, löpande text på papper och framför allt webbsidor. Varje uppgift som identifierar en levande person (namn, smeknamn, foto, beskrivning) är en personuppgift. All befattning med personuppgifter kräver enligt PUL samtycke om den inte görs i journalistisk eller konstnärlig verksamhet eller rent privat. För att det ska räknas som privat ska uppgifterna bara vara åtkomliga för en själv och familjen, som fotoalbum, telefonbok och dagbok. Ringa brott mot bestämmelsen är inte straffbart men känsliga uppgifter kräver alltid samtycke. Uppgifter om hälsa, religion, politisk åsikt och medlemskap i fackförening är alltid känsliga. Personnummer får användas endast då det är befogat.

Den som lägger upp sökbara personuppgifter måste anmäla detta till Datainspektionen eller till företagets eget personuppgiftsombud. Varje person har rätt att en gång om året på begäran få upplysning om allt som står om henne i företagets eller myndighetens register.


Sidansvarig: <henrik@nada.kth.se>
Senast ändrad 14 april 2002
Tekniskt stöd: <webmaster@nada.kth.se>