Utgångspunkt: Kent frågade om det fanns något kul med
lagen.nu att göra en upplysning om. Lagen.nu är en webbtjänst
som innehåller alla sveriges lagar och
rättsfall. Informationen hämtas i form av rådata från olika
källor, och översätts till strukturerad form.
Strukturen på en lagtext
En lag är ofta uppdelad i kapitel. Varje kapitel har en
eller flera paragrafer, och dessutom även rubriker och
underrubriker. Varje paragraf har ett eller flera stycken, och
ett stycke kan ha en punktlista. Det finns även tabeller, men
det är oklart om de hör till närmast föregående stycke eller
står för sig själv. Punktlistor kan nästlas, och det finnns
även bokstavslistor och strecksatslistor.
Från rådata till struktur
Såhär ser materialet ut i den plaintextform jag har att
utgå från. Vad som är en rubrik, en paragraf, ett stycke eller
en punktlista framgår bara implicit från textformatteringen,
som inte erbjuder mycket vägledning.
Samma material (nästan) finns även i PDF-format. Här
framgår tydligare vad som är en rubrik och vad som är ett
vanligt stycke, men fortfarande bara implicit, i form av
fetstil med flera formatteringskonventioner.
Från rådata till struktur
I slutresultatet har strukturen gjorts explicit.
Hur funkar det här?
Frågor?
Informationsmodellering
Informationsmodellering handlar om hur man strukturerar upp
information på bästa sätt. De flesta som håller på med datorer håller
på med informationsmodellering på ett eller annat sätt.
Att bestämma hur filer döps, och vilket format dess
innehåll är. Att designa ett nytt filformat.
Informationsmodellering
Att designa databasschemat. Vilka tabeller ska finnas, vilka fält och
datatyper ska de ha, vilka primary och foreign keys ska finnas, vilka
constraints ska finnas, osv. Normaliseringsformer.
Ett databasschema *är* inte ett filformat, utan en informationsmodell
som kan *uttryckas* i exempelvis SQL-kommandon (CREATE TABLE).
Informationsmodellering
Att designa vilka element och attribut som ska finnas, och vad man får
ha i dem. Kan göras informellt eller formellt - XML gör skillnad på
well-formed och valid. Finns flera metoder för att formellt definera
ett schema (DTD, XML Schema, RelaxNG). Namespaces gör det möjligt att
blanda xml-scheman i ett dokument. (Exempel RSS 2.0?).
Ett XML-format *är* inte ett filformat, utan en informationsmodell som
kan uttryckas i exempelvis XML-taggar.
Informationsmodellering
RDF är en teknik som låter dig modellera påståenden om
resurser. Dessa påståenden bildar en graf.
RDF-modellen
Ett subjekt är det man gör påståendet om, exempelvis ett dokument, en
person eller en plats.
Predikatet är typen av påstående, exempelvis att något har
ett namn, eller att något innehåller en hänvisning.
Objektet är värdet för påståendet, exempelvis "Staffan
Malmgren" (strängliteral) eller
<http://www.ida.liu.se/location?room=B227214A>; (URI)
RDF-grafer
Allt är URI:er
http://tomtebo.org/about#me
http://purl.org/dc/terms/title
http://rinfo.lagrummet.se/publ/sfs/1960:729#P2
Alla predikat och nästan alla subjekt och objekt i en
RDF-graf är URI:er. Det gör det möjligt att veta att man
pratar om samma saker.
Samlingar av predikat
Vokabulär
Taxonomi
Ontologi
Formella beskrivningar i RDF Schema (rdfs) eller Web
Ontology Language (owl)
En (kontrollerad) vokabulär är en uppsättning namn för saker.
En taxonomi är en vokabulär som är ordnad, med sub- och superklasser
En ontologi är en vokabulär som är uttryckt i ett formellt språk
Några vanliga vokabulärer
RDF
RDFS - för att uttrycka RDF-taxonomier
Dublin Core - metadata om dokument
FOAF - metadata om människor
Creative Commons - om upphovsrättighetsinformation
vCard / iCalendar - befintliga modeller, omformulerade i RDF
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Hello XHTML</title>
</head>
<body>
<p>
Staffan Malmgren
<a href="http://www.ida.liu.se/location?room=B227214A">håller en UppLYSning i Visionen</a>
om hur han använt RDF i projektet
<a href="https://lagen.nu">lagen.nu</a>.
</p>
</body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:foaf="http://xmlns.com/foaf/0.1/"xmlns:geonames="http://www.geonames.org/ontology#"xmlns:irl="http://example.org/irl#"
>
<head>
<title>Hello XHTML+RDFa</title>
</head>
<body>
<p about="http://tomtebo.org/about#me"xml:lang="sv">
<span property="foaf:name">Staffan Malmgren</span>
<a href="http://www.ida.liu.se/location?room=B227214A"
rel="irl:befinnerSigI">håller en UppLYSning i
<def about="http://www.ida.liu.se/location?room=B227214A" property="geonames:name">Visionen</def></a>
om hur han använt RDF i projektet
<a href="https://lagen.nu" rel="foaf:currentProject">lagen.nu</a>.
</p>
</body>
</html>
Semantic web-stacken
Illustration från http://obitko.com/tutorials/ontologies-semantic-web/semantic-web-architecture.html
Programmera RDF: Python
from rdflib.Graph import Graph
from rdflib import URIRef, Literal, BNode, Namespace
from rdflib import RDF
store = Graph()
# Bind a few prefix, namespace pairs.
store.bind("dc", "http://http://purl.org/dc/elements/1.1/")
store.bind("foaf", "http://xmlns.com/foaf/0.1/")
# Create a namespace object for the Friend of a friend namespace.
FOAF = Namespace("http://xmlns.com/foaf/0.1/")
# Create an identifier to use as the subject for Donna.
donna = BNode()
# Add triples using store's add method.
store.add((donna, RDF.type, FOAF["Person"]))
store.add((donna, FOAF["nick"], Literal("donna", lang="foo")))
store.add((donna, FOAF["name"], Literal("Donna Fales")))
Programmera RDF: Java
package jena.examples.rdf ;
import com.hp.hpl.jena.rdf.model.*;
import com.hp.hpl.jena.vocabulary.*;
public class Tutorial01 extends Object {
// some definitions
static String personURI = "http://somewhere/JohnSmith";
static String fullName = "John Smith";
public static void main (String args[]) {
// create an empty model
Model model = ModelFactory.createDefaultModel();
// create the resource
Resource johnSmith = model.createResource(personURI);
// add the property
johnSmith.addProperty(VCARD.FN, fullName);
}
}