2. What?
/
http://www.flickr.com/photos/psd/1428129861
FluidDB is a platform for the web of things, each
represented by an openly writable "social" object.
3. Why?
http://www.flickr.com/photos/psd/4123236978/
We want to make it easy to share, annotate, augment
and re-use information.
4. How?
http://ntoll.org/images/93.jpg
Objects are simply tagged with information
5. Key Concepts
• Objects - represent things*
• Tags - define objects’ attributes
• Namespaces - organise tags
• Permissions - control access
* NOT instantiations of classes as in OO, but simply “objects” in the common-sense use of the term.
8. Namespaces and tags are
pre-defined by users
ntoll/rating
terrycojones/books/review
amazon.com/book/title
amazon.com/book/author
amazon.com/book/isbn
esteve/books/cover
timoreilly/has_read
(Every namespace and tag has a description and is itself
represented by an object so meta-tagging is allowed)
9. A basic object:
about = An id =
“e127475b-eb93-48e1-a24f-dde6825b9ed8”
“book:Dune” object
(The about tag is a convention to help indicate
what the object represents. It is optional but
must be unique)
10. r=
ve
s/ co
k
oo
ntoll/
b
ve/
te
es
rating
am
azo
n.c
“87 om/b
-41 ook
=5
8-7
517 s/isbn
-6” =
about = An id =
“e127475b-eb93-48e1-a24f-dde6825b9ed8”
“book:Dune” object
= am
a
iew zo
timoreill
v n.c
/re s”
=
s om
r
ok rm
er tho
/bo wo “D /bo
nes and un ok
erb s/au
ojo ve s e” s/t
t”
y/has_re
ryc I lo it
k H ok
le
ter “ =
ran /bo
“F om
ad
n.c
azo
am
11. r=
ve
s/ co
k
oo
ntoll/
b
ve/
te
es
rating
am
azo
n.c
“87 om/b
-41 ook
=5
8-7
517 s/isbn
-6” =
about = An id =
“e127475b-eb93-48e1-a24f-dde6825b9ed8”
“book:Dune” object
Value Types:
= am
a
iew zo
timoreill
v n.c
/re s”
=
s om
r
ok rm
er tho
/bo wo “D /bo
nes and un ok boolean
erb s/au
ojo ve s e” s/t
t”
y/has_re
ryc I lo it
k H ok
le
ter “ = string (& set)
ran /bo
“F om
numeric
ad
n.c
opaque
azo
am
null
12. A simple and elegant
RESTful API
https://fluiddb.fluidinfo.com/objects/OBJECT_ID/NAMESPACE(s)/TAG
HTTP ‘GET’ returns the value,
HTTP ‘PUT’ adds/updates it etc...
Full API: http://api.fluidinfo.com/fluidDB/api/*/*/*
14. r=
Traditional: oo
k s/ co
ve
ntoll/
b
ve/
te
es
rating
am
azo
n.c
“87 om/b
-41 ook
=5
8-7
517 s/isbn
-6” =
about = id =
“e127475b-eb93-48e1-a24f-dde6825b9ed8”
“book:Dune”
= am
a
iew zo
timoreill
v n.c
/re s”
=
s om
r
ok rm
er tho
/bo wo “D /bo
nes and un ok
erb s/au
ojo ve s e” s/t
t”
y/has_re
ryc I lo it
k H ok
le
ter “ =
ran /bo
“F om
ad
n.c
azo
am
15. r=
FluidDB: k s/ co
ve
ntoll/
b oo
ve/
te
rating
am es
azo
n.c
“87 om/b
=5
-41 ook
8-7
517 s/isbn
-6” =
about = An id =
“e127475b-eb93-48e1-a24f-dde6825b9ed8”
“book:Dune” object
= am
a
v iew zo
n.c
/re s”
=
timoreill
s om
ok rm
r
er tho
/bo wo “D /bo
nes and un ok
erb s/au
ojo ve s e” s/t
t”
ryc I lo it le
k H ok
y/has_re
ter “ =
ran /bo
“F om
n.c
ad
azo
am
16. Permissions
• Apply to namespaces, tags and tag-values not objects
• Scoped by actions (e.g. “see”, “create”, “read”)
• Either “open” or “closed” with a list of exceptions
17. FluidDB’s Query Language
• Equality & Inequality: To find objects based on the numeric values or
exact textual values, e.g., tim/rating > 5, or geo/name = "Llandefalle".
• Textual: To find objects based on text matching their tag values, for
example, sally/opinion matches “fantastic”.
• Presence: Use has to request objects that have a given tag. For example,
has sally/opinion.
• Set contents: The contains operator can be used to select objects with a
matching value in a set of strings. The query mary/product-reviews/keywords
contains "kids" would match the object with a tag called /mary/product-
reviews/keywords and value ["cool", "kids", "adventure" ].
• Exclusion: Exclude objects with the except keyword. For example has
nytimes.com/appeared except has james/seen. The except operator
performs a set difference.
• Logic: Query components can be combined with and and or. For example,
has sara/rating and tim/rating > 5.
• Grouping: Parentheses can be used to group query components. For
example, has sara/rating and (tim/rating > 5 or mike/rating > 7).