Evolution du web
- v0 = internet lie les ordinateurs
- v1 = web lie les documents
- (v2 = applications web)
- v3 = web sémantique lie les données
- v4 = personnalisation, vie privée et sécurité
- ... monde physique, IA, etc.
Le web sémantique
- base de données planétaire et répartie (clef est URL)
- formats (RDF, OWL) et vocabulaires (ontologies)
- langage de requête (SPARQL)
=> nouvelles plateformes applicatives
CubicWeb: concepts
- entités-relations pour modéliser données
- langage de requêtes (RQL, bientôt SPARQL)
- vue appliquée aux résultats de requêtes
- application web faite de vues (HTML, JSON, etc.)
- vues sémantiques (RDF, OWL, etc.)
=> applications web ET web sémantique
CubicWeb: architecture
- serveur de données interrogeable en RQL
- multi-sources: SQL, RQL, LDAP, VCS...
- serveur de données distinct application web
- interface web partiellement générée
- bibliothèque de composants (cubes)
=> applications web ET web sémantique
Agilité
- définition modèle données suffit pour démarrer
- amélioration des vues au fur et à mesure
- migration de données sans peine
=> développement itératif et agile
Efficacité
- développement application web façon objet
- maximiser la réutilisation de code
- application extensible par les utilisateurs
- abstraire sources de données pour les unifier
=> production et maintenance efficaces
Définition d'un cube
class Blog(EntityType):
title = String(maxsize=50, required=True)
description = String()
class BlogEntry(EntityType):
title = String(required=True, fulltextindexed=True)
content = String(required=True, fulltextindexed=True)
entry_of = SubjectRelation('Blog', cardinality='**')
Assemblage de cubes
__use__ = ('blog', 'comment', 'tag',)
class comments(RelationDefinition):
subject = 'Comment'
object = 'BlogEntry'
class tags(RelationDefinition):
subject = 'Tag'
object = 'BlogEntry'
Requêtes RQL
10 derniers blogs triés par date antéchronologique
Any X ORDERBY CD DESC LIMIT 10
WHERE X is BlogEntry, X creation_date CD
entités étiquetées par cubicweb et semantic
Any X WHERE T tags X,
T name IN ('cubicweb', 'semantic')
Et aussi UNION, EXISTS, sous-requêtes, variables optionnelles (outer join), etc.
Objets métiers et vues
- objets métiers implémentent interfaces:
class BlogEntry(AnyEntity):
__implements__ = (ICalendarable,)
def start(self):
return self.creation_date
def stop(self):
return self.creation_date
- vue applicable si interface respectée
Vues sémantiques
- OWL - Ontology Web Language (modèle données)
- FOAF - Friend Of A Friend (réseaux sociaux)
- SIOC - Semantically-Interlinked Online Communities (forum, message)
- DOAP - Description of a Project (logiciel)
- microformats, RDFa, RSS, iCal, vCard, etc.
- ...
=> données publiées en RDF: LinkedData !
CubicWeb: historique
- début en 2001 - projet recherche
- version 1.0 en 2004 - production interne
- version 2.0 en 2006 - production clients
- version 3.0 en 2008 - gratuite et LGPL
- http://www.cubicweb.org
CubicWeb: futur
- support SPARQL (requête et source)
- source RDF/LinkedData (DBPedia, Geonames...)
- plus de vocabulaires existants pour vues sémantiques
- services web sémantique (fusion REST, RDF et négociation contenu)
- sameAs générique
- ...