Fundament är en kollektion av resurser, ordnade i ett träd, precis som i ett filsystem. Resurserna kan vara filer, eller databastabeller, eller enskilda värden, eller vad som helst:
http://viggo.nu/examples/
http://viggo.nu/examples/some.txt
http://viggo.nu/examples/some.txt/!lines/
http://viggo.nu/examples/some.txt/!lines/23
http://viggo.nu/db/Persons/
http://viggo.nu/db/Persons/Ola
http://viggo.nu/db/Persons/Ola/!attrs/
http://viggo.nu/db/Persons/Ola/!attrs/shoeSize
Men antingen resursen är en mapp eller fil eller ett enskilt värde, så är resursen i Fundaments ögon ett exempel på basinformationsmodellen. Enligt basinformationsmodellen är varje resurs i stort sett en databasrad: en lista med attributvärden.
Vilka attribut som en resurs har är beroende av resursens typ. För en tabellrad i en databas är attributen förstås detsamma som tabellens kolumner. För en fil är det filattributen.
Precis som en databastabell definierar resurstypen en sekvens med attribut som utgör resursens primärnyckel. För en fil är det attributet name. För en tabellrad är det tabellens primärnyckel, antingen den är singulär (t ex Person.id
) eller sammansatt (t ex kombinationen Dog.name
och Dog.ownerId
).
Dessutom kan resursen ha barn, om resurstypen är en sk kollektion. En mapp i ett filsystem är en kollektion, medan en vanlig fil inte är det. En tabell i en databas är en kollektion, medan en rad i tabellen inte är det.
Kollektioner:
http://viggo.nu/examples/
http://viggo.nu/db/Persons/
Inte kollektioner:
http://viggo.nu/examples/some.txt
http://viggo.nu/examples/some.txt/!lines/23
http://viggo.nu/examples/db/Persons/Ola
http://viggo.nu/examples/db/Persons/Ola/!attrs/shoeSize
Splitters är kollektioner, det är ett sätt att aktivt omvandla singulära element till sök- och traverserbara kollektioner:
http://viggo.nu/examples/some.txt/!lines/
http://viggo.nu/db/Persons/Ola/!attrs/
Vid traversering genom trädet krävs det att varje föräldrakollektion kan leverera ett barn givet ett
id-uttryck. Varje mapp- och filnamn i kedjan är ett id-uttryck.
http://viggo.nu/examples/
http://viggo.nu/examples/aFolder/
http://viggo.nu/examples/aFolder/aFile.txt
Id-uttrycket är helt enkelt primärnyckeln (i fallet filer och mappar: värdet av attributet
name
). När det rör sig om sammansatta nycklar blir id-uttrycket detsamma som de två nyckelvärdena med ett komma emellan:
http://viggo.nu/examples/db/Dogs/Ola,Fido
http://viggo.nu/examples/db/Dogs/Ola,Laban
http://viggo.nu/examples/db/Dogs/Arne,Fido
Förutom attribut (där vissa ingår i primärnyckeln), och eventuella barn, har varje resurs en binär representation, dvs en serie bytes (enligt en viss MIME-typ) som returneras när man surfar till resursen.
Vad denna binära representation består av bestäms av resurstypen. För en fil är det naturligtvis filinnehållet. För en mapp är det innehållet i indexfilen precis som på en vanlig webbserver.
Innehållet är i alla hänseenden ett automatiskt attribut, alltså ett resursattribut som du inte utan vidare kan sätta direkt, utan som bestäms av värdet av andra attribut.
Innehållsattributet har ett särskilt namn: !content
.