Méthode de protection et de correction d'une information de scène multimédia
La présente invention concerne de manière générale une méthode permettant de protéger contre des erreurs éventuelles un document décrivant une scène multimédia ou un document décrivant une modification d'une scène multimédia ainsi qu'une méthode de correction des erreurs affectant un document ainsi protégé. L'invention concerne également un serveur et un terminal de réception capables de mettre en œuvre ladite méthode de correction.
Nous appelerons par la suite scène multimédia un arrangement spatio-temporel d'objets sonores et/ou graphiques, vidéo ou images, synthétiques ou naturels susceptible de représentation en 2 ou 3 dimensions. Ces dernières années ont vu le développement de techniques de représentation orientée objet de scènes multimédia comme celles utilisées dans le langage VRML (Virtual Reality Modeling Language), les formats MPEG-4, FLASH ou SMIL. Une telle représentation orientée objet décrit la composition de la scène multimédia selon une structure arborescente d'objets graphiques et /ou sonores. Les feuilles de l'arbre sont des objets de base ou primitives et les nœud intermédiaires sont des objets composites. A partir de cette description et
des primitives, il est possible de reconstuire la scène d'origine. Ainsi, par exemple, MPEG-4 utilise une structure syntaxique appelée BIFS (Binary Format for Scènes) de type arborescent. Les objets graphiques et/ ou sonores sont placés dans des flux élémentaires ES (Elementary Stream) pour être transmis, un objet pouvant être transporté dans un ou plusieurs flux. Un descripteur d'objet identifie les flux servant à son transport.
Les techniques de compositions de scènes multimédia les plus avancées distinguent la phase de création du contenu multimédia de la phase d'adaptation et du traitement du contenu en vue de son émission vers un récepteur distant. La phase de création est réalisée par un auteur (infographiste) qui va définir le scénario de son animation ou application graphique multimédia sans tenir compte des contraintes dues à l'émission du contenu et à son transport. Lors de la phase d'adaptation, un traitement spécifique du contenu va permettre de l'insérer dans des canaux de transport spécifiques (par exemple, dans un canal MPEG-2 Transport Stream) et de satisfaire des contrats de qualité de service. Cette phase est souvent faite de façon automatique. En particulier, la phase d'adaptation du contenu multimédia pour son transport sur un réseau donné n'opère que sur le contenu final à émettre et ne tient pas compte de l'agencement et de la hiérarchie des objets de base qui composent la scène multimédia. Cette phase d'adaptation est fonction des paramètres du réseau de transport utilisé (bande passante, estampilles temporelles, charge du terminal receveur, etc.) qui doivent être a priori recalculés à chaque fois à partir du contenu. En outre, cette phase ne prend en compte la protection contre les erreurs des objets et des médias que dans leur ensemble. Elle n'est donc pas efficace si l'on souhaite retransmettre seulement une des parties de la scène. L'objectif de la présente invention est de proposer une méthode d'adaptation de contenu multimédia qui ne présente pas les inconvénients précités. En particulier, l'objet de l'invention est de proposer une méthode de protection contre les erreurs qui soit adaptée au contenu de la scène multimédia et indépendante des caractéristiques du réseau.
Cet objectif est atteint par la mise en oeuvre d'une méthode de protection contre les erreurs d'une information, dite information initiale, décrivant ou modifiant une scène multimédia, ladite scène étant représentée par un ensemble d'objets graphiques et/ou sonores élémentaires la composant, ladite information initiale permettant de reproduire ou de modifier au moins l'un desdits objets, dans laquelle l'on forme des groupes d'objets élémentaires, chacun desdits groupes comprenant au moins l'un desdits objets, un groupe pouvant contenir un ou plusieurs autres groupes selon une structure arborescente, chaque groupe ainsi formé étant indépendamment protégé contre les erreurs, et que l'on génère une information additionnelle identifiant chacun desdits groupes.
Avantageusement, pour l'un au moins desdits groupes, l'information additionnelle contient une liste ordonnée des groupes ou des objets le composant, l'ordre de la liste donnant les priorités de correction respectives de ces derniers. Si les groupes sont arrangés selon une structure arborescente, un groupe pouvant contenir un autre groupe, l'information additionnelle donne l'ordre de composition de ces derniers.
Selon une variante l'information additionnelle donne l'ordre d'apparition des différents groupes lors de la reproduction ou de la modification de ladite scène.
Avantageusement, un codage canal peut être appliqué sur chacun des groupes. Si ladite information initiale décrit elle-même ladite scène multimédia selon un arbre de composition, chaque nœud dudit arbre représentant un ou une pluralité desdits objets élémentaires, lesdits groupes peuvent être choisis parmi les nœuds dudit arbre.
L'information initiale sera par exemple formulée selon l'un des formats VRML, MPEG-4, Flash.
Selon un premier mode de réalisation, l'information additionnelle est adjointe à l'information initiale préalablement à sa transmission ou son enregistrement. Avantageusement, ladite information additionnelle est formulée selon un langage (SDML) de type XML, adapté à décrire les relations de composition entre groupes.
Chauqe groupe peut être identifié par un premier attribut (xbifsjd) donnant le nom dudit groupe au moyen d'une déclaration d'identification (name=) dudit langage et, éventuellement, par un second attribut (alt_xbifs_id) donnant un nom alternatif audit groupe, le nom alternatif étant utilisé si le groupe n'est pas accessible sous ledit nom.
Si la scène multimédia fait appel à une pluralité de médias, un média étant constitué d'un son, d'une image ou d'une vidéo, chacun desdits médias peut être identifié par un attribut (média Jd) donnant le nom dudit média au moyen d'une déclaration d'identification (name=) dudit langage et éventuellement par un second attribut (alt_media_id) donnant un nom alternatif audit média, le nom alternatif étant utilisé si le média n'est pas accessible sous ledit nom .
L'information additionnelle peut comprendre au moins une référence à un fichier formaté dans ledit langage, ledit fichier étant identifié par un attribut (file_id) donnant le nom dudit fichier. L'information additionnelle peut égalment comprendre au moins une référence paramétrée à un URL utilisant une pluralité de paramètres, chaque paramètre étant identifié par un attribut (fieldjiame) donnant le nom dudit paramètre, chaque paramètre pouvant prendre une ou plusieurs valeurs (field value). L'information additionnelle peut encore comprendre au moins une déclaration associant à une action de l'utilisateur de la scène-multimédia un fichier dudit langage, le fichier étant destiné à être chargé lorsque ladite action a lieu.
En outre, l'information additionnelle peut comprendre au moins une référence d'un premier groupe, d'un média, d'un élément textuel ou d'un élément traduisant une action d'un utilisateur de la scène multimédia, à un second groupe indiquant que le premier groupe, ledit média, ledit élément textuel ou ledit élément traduisant ladite action entre dans la composition dudit second groupe, chaque référence étant associée à un lien de composition (hook), chaque lien de composition étant identifié par un attribut (hook d) au moyen d'une déclaration d'identification dudit langage.
Typiquement, ladite information additionnelle contient une description arborescente de la scène multimédia à partir d'un groupe racine associé à la scène multimédia elle-même, chaque groupe autre que le groupe racine étant lié à un groupe
de niveau inférieur par un lien de composition, le groupe racine (body) étant spécifié par le nom d'un groupe au moyen une déclaration (root=) dudit langage.
Un premier groupe peut être inséré dans un second groupe au moyen d'une commande d'insertion <xbifs name= 'xbifs jd', hook= 'hook_id>, ladite commande d'insertion spécifiant alors le nom (xbifsjd) du premier groupe et l'attribut d'identification (hook d) d'un lien de composition relatif au second groupe.
Si un premier groupe ou un média constitué d'un son, d'une image ou d'une vidéo, est lié à un second groupe pour la protection contre les erreurs, le lien entre ce premier groupe ou ce média et ce second groupe est identifié au moyen d'une déclaration de dépendance (dependsOnXBIFS) dudit langage.
Si un ordre de priorité est fixé entre des sous-groupes d'un même groupe, les priorités attribuées aux dits sous-groupes sont identifiées par des déclarations de valeurs de piorité (priority value) dudit langage.
De même, si un média est lié à une autre média ou si un groupe est lié à un média pour la protection contre les erreurs, les liens entre ces médias ou entre ce groupe et ce média sont identifiés au moyen d'une déclaration de dépendance (dependsOnMedia) dudit langage.
Si un ordre de priorité est fixé entre différents médias, une valeur de priorité (priority value) est attribuée à chacun desdits médias au moyen d'une déclaration de priorité dudit langage.
L'invention concerne également une méthode de correction d'erreurs affectant une information décrivant ou modifiant une scène multimédia, ladite information étant fournie par une source après avoir été préalablement protégée contre les erreurs par la méthode de protection exposée ci-dessus. Selon cette méthode de correction, si une erreur est détectée dans ladite information, on détermine au moyen de l'information additionnelle, le groupe de plus bas niveau dans lequel est localisée ladite erreur.
Selon une variante de réalisation, on transmet à la source une information identifiant le groupe erroné et ladite source retransmet les objets élémentaires constituant ledit groupe erroné.
Selon une autre variante de réalisation, on transmet à la source une information identifiant l'objet dans lequel est localisée ladite erreur, ladite source en déduisant alors, au moyen de l'information additionnelle, le groupe dans lequel est localisée ladite erreur. La source retransmet ensuite les objets élémentaires constituant le groupe erroné.
Si le groupe erroné comporte une liste ordonnée d'objets élémentaires le constituant, les objets élémentaires sont corrigés selon ledit ordre.
Avantageusement, la localisation d'erreur est obtenue au moyen d'un décodage canal. L'invention concerne encore un serveur d'information multimédia, ladite information ayant été préalablement protégée contre les erreurs par la méthode de protection exposée plus haut. Ce serveur est adapté à analyser ladite information additionnelle et à transmettre des flux binaires correspondant aux différents objets, à recevoir une information identifiant un groupe erroné et à retransmettre les flux binaires correspondant aux objets appartenant au groupe erroné.
L'invention concerne également un serveur d'information multimédia, ladite information ayant été préalablement protégée contre les erreurs par la méthode de protection exposé plus haut. Ce serveur est adapté à analyser ladite information additionnelle et à transmettre des flux binaires correspondant aux différents objets, à recevoir une information identifiant un objet erroné et à en déduire le groupe de plus bas niveau contenant ladite erreur puis à retransmettre les flux binaires correspondant aux objets appartenant au groupe erroné.
L'invention concerne aussi un terminal de reproduction d'une scène multimédia transmise par une source, l'information décrivant la scène multimédia ayant été préalablement protégée contre les erreurs par la méthode de protection exposée plus haut. Ce terminal est adapté à extraire de ladite information des flux binaires correspondants aux objets de ladite scène, à identifier, en cas d'erreur, l'objet dans lequel est localisée ladite erreur et à transmettre à ladite source, sur un canal de retour, une information identifiant ledit objet.
L'invention concerne en outre un terminal de reproduction d'une scène multimédia transmise par une source , l'information décrivant la scène multimédia ayant été préalablement protégée contre les erreurs par la méthode de protection exposée plus haut. Ce terminal est adapté à extraire de ladite information des flux binaires correspondants aux objets de ladite scène, à recevoir et analyser l'information additionnelle générée par ladite méthode de protection, et, en cas d'erreur, à identifier à partir de l'information additionnelle le groupe de plus bas niveau dans lequel est localisée ladite erreur, puis à transmettre à ladite source, sur un canal de retour, une information identifiant ledit groupe. Ce terminal de reproduction est avantageusement adapté à effectuer un décodage canal sur lesdits flux binaires et à indiquer, en cas d'erreur détectée par ledit décodage de l'un des flux, l'objet erroné correspondant.
L'invention concerne enfin un signal de description de scène multimédia, transportant une information additionnelle générée à partir d'une information multimédia au moyen de la méthode de protection exposée plus haut.
Les caractéristiques de l'invention mentionnées ci-dessus, ainsi que d'autres, apparaîtront plus clairement à la lecture de la description faite en relation avec les dessins joints, parmi lesquels :
La Fig. 1 représente de manière schématique la création de groupes d'objets utile à la méthode de protection contre les erreurs selon l'invention ;
La Fig. 2 illustre la méthode de protection contre les erreurs et de leur correction selon un mode de réalisation de l'invention.
L'idée générale à la base de l'invention est la création d'un méta-langage de type XML au dessus du langage de description de la scène multimédia, permettant de décrire les parties de la scène multimédia qui sont considérées comme indépendantes. Ces dernières sont représentées sous forme de groupes d'objets au sens du langage de description, ces groupes étant organisés de manière arborescente. Ainsi un groupe peut lui-même être constitué de groupes plus simples et ainsi de suite. Chaque groupe est considérée comme une entité élémentaire pour la protection et la correction des erreurs. Ainsi, si une erreur est détectée dans une scène multimédia, il suffira de
déterminer le groupe de plus bas niveau au sein de l'arborescence dans lequel l'erreur est localisée. Seuls les objets élémentaires appartenant à ce groupe erroné seront corrigés, de préférence par retransmission . La retransmission peut être déclenchée par une requête ou un défaut d'acquittement dans un certain délai (par exemple selon une technique d'ARQ ou d'hybrid ARQ) si l'on dispose d'un canal de retour entre le récepteur et l'émetteur multimédia ou bien par retransmission systématique (technique dite de carrousel de données employé dans MPEG-2) si l'on n'en dispose pas. Dans le premier cas on évite de retransmettre inutilement des éléments de la scène non affectés par l'erreur. Par la suite il sera fait référence au méta-langage, évoqué plus haut, sous l'acronyme SDML pour Scène Description Markup Language.
La Fig. 1 représente la manière dont les groupes d'objets sont créés. La partie gauche de la Fig. montre une représentation arborescente d'une scène multimédia dans laquelle chaque nœud de l'arbre correspond à un objet, l'objet de plus haut niveau ou objet racine, O0, correspondant à la scène elle-même. L'arborescence donne les relations de composition de la scène. La ligne en traits interrompus indique une relation de dépendance entre deux objets On et Om, l'objet Op étant supposé indépendant des deux premiers. Cette relation de dépendance est déterminée, par exemple par l'auteur de la scène, lorsqu'il considère que deux objets sonores ou graphiques doivent être conjointement protégés contre les erreurs. La relation de dépendance contre les erreurs peut également être implicite, par exemple lorsqu'un objet utilise les propriétés ou les paramètres d'un autre objet. Enfin, la relation de dépendance entre objets peut être automatiquement générée par l'outil de création lors de la composition de la scène. La partie de droite de la Fig. représente l'arborescence après regroupement des objets O„ et Om. Le nœud Gnm représente le couple d'objets On et Om et le nœud Gp représente le seul objet Op. Les objets On et Om sont conjointement protégés alors que l'objet Op est protégé indépendamment des deux premiers. En opérant de proche en proche, on obtient ainsi un nouvel arbre dont les nœuds sont des groupes d'objets (ou, en représentation développée, des sous-arbres), indépendants au sens de la protection contre les erreurs. Le nœud de plus haut niveau
ou groupe racine, correspond à la scène elle-même. Les nœuds de plus bas niveau peuvent ne conternir qu'un seul objet (par ex. une primitive graphique) ou une pluralité d'objets . Les relations entre groupes et les opérations entre groupes sont décrites, comme nous le verrons plus loin, au moyen du langage SDML. II est important de noter que la description initiale de la scène (partie haute de la
Fig.) peut ne pas être arborescente, par exemple si la scène ne fait pas l'objet d'une description orientée objet et est simplement représentée comme une simple juxtaposition d'éléments graphiques (par ex. simples blocs) et/ou sonores. En revanche la description en termes de groupes est arborescente, le groupe de plus haut niveau étant, on le rappelle, identifiée avec la scène elle-même.
Avantageusement, on partira néanmoins d'une représentation orientée objet. De très nombreux outils de création de contenu multimédia adopte une approche orientée objet où l'auteur doit d'abord indiquer la scène graphique initiale (racine de l'arbre de composition qui désigne comment la scène est composée) puis insère de proche en proche des sous-objets graphiques de natures différentes (média, animations, description d'objets ou de sous-scènes graphiques, actions de navigation offertes à l'utilisateur) en partant d'une description de la scène haut-niveau et an allant vers les comportements spatio-temporels précis (c'est-à-dire de bas-niveau) des objets graphiques et/ou sonores. La représentation sous forme de groupes indépendants présente l'avantage de conserver la méthodologie orientée objet.
Le format de stockage interne de ces outils de création de contenus multimédia garde une structure interne, sous forme d'arbre de composition, de la scène compatible avec cette approche orientée objet. Ainsi, même si l'auteur n'est pas familier avec l'approche orientée objet, il en utilise cependant les fondements de base. Il est possible à partir d'outils standards (comme 3D Studio MAX (Kinetix®), Director (Macomedia®), CosmoWorlds (CosmoSoftware®), etc.) de traduire la structure de la scène en termes de groupes au format du langage SDML. Selon un mode de réalisation particulier, on pourra utiliser un plug-in d'exportation utilisant le Software Development Kit du logiciel 3D Studio MAX décrivant la scène en langage SDML.
Il n'existe pas de façon univoque de décrire une scène sous forme de groupes, en langage SDML. Un telle description passe d'abord par le choix d'un découpage de la scène en groupes de base (ou groupes de plus bas niveau) puis par celui des liens de dépendance entre les différents groupes. La Fig. 2 illustre la méthode de protection et de correction selon un mode de réalisation de l'invention. Lors de la phase de création, l'auteur compose une scène multimédia en précisant les groupes de base, leur ordre de composition et, le cas échéant, leur ordre de priorité en cas de correction d'erreur. Ces informations sont fournies au format du langage SDML. Avant de transmettre le contenu multimédia sur un réseau de transport, on pourra appliquer un codage canal sur les flux binaires correspondant aux différents groupes. Ainsi, la protection contre les erreurs assurée par le codage canal suivra la partition en groupes indépendants. Avantageusement, les groupes dont le coût de retransmission est faible ne seront pas protégés par codage canal. II faut noter que, hormis le codage canal éventuel, le contenu multimédia ne subit pas de modification.
Le contenu multimédia (éventuellement protégé par codage canal) est transmis par un serveur au terminal multimédia d'un utilisateur. Selon une première variante de réalisation, le serveur lit la description SDML puis transmet les flux binaires correspondant au contenu de la scène. Selon une seconde variante de réalisation, la description SDML est transmise au récepteur avec le contenu .
A la réception par le terminal, un décodeur de description de scène graphique et plus généralement multimédia (DDSG) analyse la decription de scène et recrée une structure interne permettant de reproduire, animer ou modifier ladite scène. Le DDSG est un assimilable à un automate à états qui, dans un premier temps, analyse les flux de description de scène (à la suite d'un éventuel démultiplexage) correspondant aux différents objets et construit ensuite la structure interne, sauf si la description de scène est incompatible avec les spécifications du langage utilisé (Flash, SMIL, MPEG-4, VRML, etc.). Dès qu'une erreur, typiquement une erreur de syntaxe, est détectée dans un flux de description de scène, ou qu'une incohérence ou encore une incompatibilité
de format est détectée (ces différentes situations seront désignées par la suite sous le terme générique d'erreur), le descripteur de scène détermine dans la structure interne l'endroit où l'erreur est survenue. En revanche, si l'erreur ne porte pas sur la syntaxe ou le format, par exemple si elle affecte une valeur numérique dans un flux, le DDSG ne le détectera pas. Néanmoins, si un codage canal est prévu (ou un simple CRC), il sera possible de déterminer dans quel objet cette erreur est localisée. Dans la première variante de réalisation, le terminal retransmet au serveur, sur une voie de retour, une information donnant la localisation de l'objet erroné. Le serveur détermine alors au moyen de la description SDML le groupe qui est affecté par l'erreur. Dans la seconde variante de réalisation, le terminal connaît la définition des groupes (puisqu'il dispose lui-même de la description SDML) et renvoie au serveur directement l'identité du groupe concerné. Le serveur retransmet alors au terminal les flux binaires relatifs aux objets appartenant au groupe erroné.
Nous illustrerons la méthode de correction par un exemple. Soit la description au format VRML de la scène multimédia suivante :
DEF ID_1 Group
{ children [
DEF ID2 Shape
{ appearance Appearance
{ material Material
{
}
} geometry Sphère { radius 1.1
}
}
DEF ID3 Sound
{ source AudioClip { url [ "od:l"]
}
location 0.0 0.0 1.0 direction 0 0 2 spatialize TRUE
}
] background DEF ID4 Background
{ skyColor
[ 0.0 1.0 1.0 ]
} } #end of ID_l
Cette scène peut se structure naturellement en un nœud racine Group contenant 3 sous-groupes, chaque sous-groupe comprenant chacun un objet: Shape, Sound, Background. Une erreur sur l'un de ces objets n'a a priori pas de conséquence sur un autre de ces objets. La scène graphique est ici agencée par l'insertion de 3 groupes dans le groupe racine Group. Supposons que le sous-groupe Shape subisse une erreur de transmission. On aura par exemple une valeur erronée du rayon (radius) de la sphère (≠l.l) ou encore une erreur de syntaxe sur le terme radius. Supposons que l'erreur porte sur la syntaxe :
DEF ID2 Shape
{ appearance Appearance
{ material Material {
} } geometry Sphère
{ raKius 1.1
} }
Le DDSG est capable, au moment où il analyse la description de l'objet Shape d'identifier une erreur dans le terme raKius et renvoie par conséquent au serveur l'information qu'une erreur de transmission a été reçue dans l'objet ID2. Le DDSG indique alors à l'application du terminal qui reproduit le contenu multimédia l'erreur et sa localisation. Si le terminal ne dispose pas de canal de retour, l'application peut attendre une éventuelle retransmission de l'objet pour le corriger (par ex. utilisation d'un carrousel de données). Dans le cas où le terminal dispose d'un canal de retour (par exemple Upstream en MPEG-4), il convient de distinguer en fonction de la variante de réalisation.
Dans la première variante, l'identification (ID2) de l'objet erroné est transmis au serveur qui détermine le groupe de plus bas niveau contenant ledit objet. En l'occurrence, puisqu'il existe un groupe de même nom (ID2) ne contenant que cet objet, seul ce dernier sera retransmis. Si en revanche, si les objets ID2, ID3 et ID4 avaient été reconnus dépendants les uns des autres pour la protection contre les erreurs, tous les objets du plus petit groupe contenant ID2, ici le groupe racine ID1, devraient être retransmis. Dans la seconde variante, le terminal connaît la description SDML et pourra directement déterminer le groupe erroné. Le serveur reçoit l'identificateur de ce
groupe sur la voie de retour et se borne à retransmettre les flux relatifs aux objets du groupe erroné.
Dans les deux variantes, la description SDML est utilisée pour déterminer le groupe erroné. La description SDML de la scène de l'exemple précédent est :
<?xml version= »1.0 » encoding≈ »US-ASCII »?> <!DOCTYPE sdml SYSTEM « SDML.DTD »>
<sdml version= »1.0 »>
<! —spécification du groupe racine de la scène— > <body root≈ »Group »>
<!— spécification des sous-groupes constituant le groupe racine~> <xbifs name= »sphère » hook= »ID1 » />
<xbifs name= »son3D» hook= »ID1 » /> <xbifs name= »arrière-plan» hook= »ID1 » />
</body> </sdml>
Le terme « xbifs » (pour eXtended BIFS) désigne conventionnellement un groupe dans le langage SDML (quel que soit le langage original de description de la scène : MPEG-4, VRML, FLASH etc.). Ici, trois groupes, respectivement intitulés « sphère », « son 3D » et « arrière-plan » sont créés et rattachés au groupe racine.
Supposons qu'une erreur de transmission ait été détectée dans ID2. La description SDML indique que les groupes « sphère », « son 3D » et « arrière-plan » sont indépendants. Par conséquent le groupe erroné est « sphère » et le flux relatif à « sphère » sera retransmis par le serveur. Bien que l'invention ait été illustrée en Fig. 2 dans le cadre d'une protection contre les erreurs d'une scène multimédia préalablement à sa transmission (par un serveur à un terminal) et à la correction des erreurs par retransmission, il est clair qu'elle peut également s'appliquer à la protection contre les erreurs préalablement au
stockage d'une scène sur un support d'enregistrement et à la correction des erreurs par relecture du support.
Nous présenterons ci-après la syntaxe du langage SDML et tout d'abord la syntaxe des différents attributs :
Identificateur de version (Versionjd)
" Description :
Un identificateur de version est utilisé pour spécifier une version du langage SDML. S'il n'est pas présent une erreur est notifiée.
" Syntaxe :
Un identificateur de version utilise la syntaxe usuelle: major[.minor[.build]], où major, minor et build sont des entiers précédés de façon optionnelle par des 0.
" Utilisé par les éléments suivants : <sdml> (version attribut)
' Exemple :
<sdml version="1.0"/>
XBIFS identificateur (xbifsjd)
' Description :
Un xbifs identificateur fournit une référence non ambiguë vers un xbifs dans la base de données multimédia. Si le xbifs ne peut pas être retrouvé alors une erreur est notifiée (sauf si un xbifs alternatif est présent). " Syntaxe :
Un xbifs_id doit suivre la syntaxe spécifiée par la base de donnée multimédia.
" Utilisé par les éléments suivants : <body> (root attribut) <xbifs> (name attribut) " Exemples :
<body root="VIRTUAL_SHOP"/>
<xbifs name="products/ρhones/OLA" hook="product_l"/>
XBIFS alternatif identificateur (alt bifsjd)
' Description : Un xbifs alternatif identificateur est un xbifs identificateur qui est utilisé si le xbifs référencé par le xbifs_id n'est pas accessible. Si le xbifs référencé par un identificateur alternatif n'est pas accessible alors une erreur est notifiée par le compositeur de scène.
" Syntaxe : La syntaxe est la même que celle du xbifs_id, excepté le fait que "NONE" est utilisé si aucun xbifs alternatif n'est à insérer.
" Utilisé par les éléments suivants : <xbifs> (ait attribut)
" Exemples :
<xbifs name="products/phones/OLA" hook="product_l" alt="products/phone/generic_phone"/>
Média identificateur (média d) " Description :
Un tel attribut est utilisé pour spécifier un identificateur d'un média. Un média est soit une image, un son ou une vidéo. Un tel média peut être stocké dans la base de données multimédia ou fournit par le serveur SDML.
" Syntaxe : Si le média est extrait de la base de données, l'identificateurde média est donné par un identificateur compatible avec la structure de la base de données. Si le média est fourni par le serveur SDML, l'identificateur doit être une URL préfixé par "ext:"
" Utilisé par les éléments suivants : <media> (name attribut)
• Exemples :
<média name="shop/logo/logoft" hook="LOGO"/>
<média name="ext:http://sdml.fr/logoft.gif ' hook="LOGO"/>
Média alternatif identificateur (altjnediajd)
' Description :
Un identificateur alternatif de média est un identificateur de média qui est utilisé si le média référencé par un média_id n'est pas accessible. Si le média référencé par l'identificateur alternatif n'est pas accessible, une erreur est notifiée par le compositeur de scène.
" Syntaxe :
La syntaxe est la même que celle du media_id, excepté le mot "NONE" qui est utilisé si aucun média alternatif ne doit être inséré.
" Utilisé par les éléments suivants : <media> (ait attribut)
' Exemples:
<média name="ext:http://sdml.fr/logoft.gif ' hook- 'LOGO" alt="shop/logo/logoft"/>
Identificateur de hook (hook id)
' Description :
Un identificateur de hook fournit une référence non ambiguë à un hook fourni par un XBIFS. Si le hook n'est pas défini par le XBIFS ou si son type (xbifs, text ou action) ne correspond pas au type requis alors une erreur est notifiée par le compositeur de scènes.
• Syntaxe :
Un identificateur de hook commence avec une lettre ou un underscore, et peut être suivi par des caractères alpha-numeriques (lettres, nombres ou underscores).
" Utilisé par les éléments suivants ; <xbifs> (hook attribut)
<text> (hook attribut)
<action> (hook attribut)
• Exemples :
<xbifs name="products/phones/OLA" hook="product_l"/>
Position (position)
• Description :
Une position fournit une position non ambiguë d'un xbifs dans un environnement 2D ou 3D (éventuellement 2D et temporel ou 3D et temporel) au sein d'un autre xbifs, suivant l'origine définie dans ce xbifs. Si la dimension et la position ne correspondent pas à la dimension du xbifs, le compositeur de scène notifie une erreur.
" Syntaxe :
La syntaxe est : x,y[,z] (éventuellement [,t]?) où x, y, and z sont des nombres.
" Utilisé par les éléments suivants : <xbifs> (position attribut)
m Exemples :
<xbifs name="products/phones/OLA" position="10,10,30"/>
Identificateur de fichier SDML (SDMLJileJd) " Description :
Un Identificateur de fichier SDML fournit une référence non ambiguë vers un fichier SDML. Si ce fichier SDML n'est pas accessible alors une erreur est notifiée par le serveur .
• Syntaxe : Les identificateurs de fichiers SDML utilisent la syntaxe normalisée des URI
(c'est à-dire des URL sans paramètres). Les paramètres des URL peuvent être supportés mais doit être séparé par "&" au lieu de "&" en raison de la limite de la syntaxe XML.
• Utilisé par les éléments suivants : <action> (url attribut)
" Exemples:
<action url="file: //next_scene.sdml" hook="action_next"/> <action url="http: //www.francetelecom.fr/new_products.sdml" hook="action_goto_new_products"/> <action url="http: //www.shop.com?action=buy&product=:ola" hook="action_buy_product 1 "/>
Nom de Field (field iame) " Description : " Un tel attribut est utilisé pour donner un nom à un paramètre dans une URL.
• Syntaxe :
Le Nom de Field utilise la syntaxe normalisée des URL
• Utilisé par les éléments suivants : <fιeld> (name attribut)
" Exemples :
<Nom de Field="product" value="ola"/>
Valeur de Field (field_value)
' Description : Un tel attribut est utilisé pour spécifier la valeur d'un paramètre dans un URL.
" Syntaxe :
Field values utilisent la syntaxe normalisée des paramètres des URL.
" Utilisé par les éléments suivants : <field> (value attribut)
" Exemples :
<Nom de Field- 'action" value- 'buy"/>
Valeur de Priorité (priority _value) n Description :
Un tel attribut est utilisé pour spécifier la priorité d'un descendant par rapport à ces frères dans l'arbre de composition. La valeur la plus grande indique que le descendant doit être traité avant les autres.
" Syntaxe : Les valeurs de Priorité utilisent la syntaxe normalisée des paramètres entiers.
" Utilisé par les éléments suivants : <field> (priority attribut) <media> (priority attribut) <xbifs> (priority attribut) <action> (priority attribut)
" Exemples :
<Nom de Field- 'action" value- 'buy" priority=0 />
Identificateur de dépendance par rapport à un média (dependsOnMediajd) " Description :
Un tel attribut est utilisé pour spécifier qu'un xbifs ou un média dépend d'un autre média. Un identificateur de dépendance fournit une référence non ambiguë à un média.
• Syntaxe : Les identificateurs de dépendance suivent la syntaxe de la base de données multimédia.
" Utilisé par les éléments suivants : <xbifs> (dependsOnMédia attribut) <media> (dependsOnMédia attribut)
• Exemples :
<xbifs name="phones/Ola" dependsOnMedia=" ext:http://sdml.fr/vitrineft.gif'/>
XBIFS Dependence identificateur (dependsOnXBIFSjd) ' Description :
Un tel attribut est utilisé pour spécifier qu'un xbifs ou un média dépend d'un autre xbifs. Un identificateur de dépendance fournit une référence non ambiguë à un xbifs dans la base de donnée multimédia.
• Syntaxe : Les identificateurs de dépendance suivent la syntaxe de la base de donnée multimédia.
" Utilisé par les éléments suivants : <xbifs> (dependsOnXBIFS attribut) <media> (dependsOnXBIFS attribut) " Exemples :
<xbifs name="phones/Ola" dependsOnXBIFS="vitrine"/> <média name- 'ext:http://sdml.fr/logoft.gif' dependsOnXBIFS="graphics/logo
" />
Nous donnerons ci-après la syntaxe des éléments dans le langage SDML.
<sdml>
- Description : L'élément <SDML> est l'élément racine requis dans un document SDML. Il fournit des informations à propos du langage du document.
- Syntaxe :
<SDML version^ « version jd »/> où version Jd spécifie la version utilisée par ce document (par défaut 1.0) - Elément Parent :
Aucun
- Elément Fils : <head> (optionnel et unique) <body> (requis et unique) - Exemples
<sdml version- '1.0">
<body root="VIRTUAL_SHOP">
</body>
</sdml>
<head>
- Description :
Cet élément est un élément optionnel qui fournit des informations à propos du document (e.g. meta-information, paramètres de cache, etc.). Dans la version SDML 1.0, cet élément est vide.
- Syntaxe : <head/>
- Elément Parent : <sdml>
- Elément Fils :
Aucun (dans la version 1.0 version) - Exemple:
<head/>
<bodv>
- Description :
<body> est l'élément racine de la description de scène. Il doit spécifier l'identificateur de la racine XBIFS de la scène.
- Syntaxe:
<body root= « xbifs_id »/> où root spécifie l'identificateur de la racine XBIFS de la scène (requis)
- Elément Parent : <sdml>
- Elément Fils : <xbifs> (optionnel) <text> (optionnel)
<action> (optionnel) <media> (optionnel)
- Exemples :
<body root="MA_VITRTNE"/>
<text>
- Description : L'élément <text> est utilisé pour insérer une value textuelle dans la description de la scène. Le texte est inséré dans le hook spécifié dans le XBIFS (i.e. le XBIFS spécifié par le père <body> ou l'élément <xbifs>).
- Syntaxe:
<text hook= « hookjd » length=« integer»> body
</text> où : hook donne une référence à un hook textuel fourni par le XBIFS père (requis) - length donne le nombre de caractères par lignes de texte (optionnel)
Si cette valeur n'est pas spécifiée, le texte ne doit pas être coupé. - body spécifie la valeur du texte à insérer (optionnel)
- Elément Parent : <body> <xbifs>
- Elément Fils : Aucun
- Exemples:
<body root="HOME_PAGE"> <text hook="user_name">Nemo</text>
</body>
<xbifs>
- Description :
Le <xbifs> élément est utilisé pour insérer un XBIFS dans la scène. Le XBIFS est insérer dans le XBIFS père (i.e. le XBIFS spécifié par le père <body> ou l'élément <xbifs>), au hook spécifié ou à la position spécifiée.
- Syntaxe :
<xbifs name= " xbifs _id " hook= "hook d" alt= "alt_xbifs_id"/> <xbifs name= "xbifsjd" position- "position" ait- ' alt_xbifs_id"/> où :
- name spécifie l'identificateur du XBIFS à insérer (requis) - hook spécifie le hook fournit par le XBIFS père où le XBIFS doit être inséré (exclue par la position)
- position spécifie la position explicite (suivant le XBIFS père) où le XBIFS doit être inséré (exclue par hook) ait spécifie le XBIFS alternatif à utiliser si le XBIFS référencé par l'attribut nom n'est pas accessible (optionnel)
- Elément Parent : <body>
<xbifs>
- Elément Fils : <xbifs> (optionnel)
<text> (optionnel) <action> (optionnel) <media> (optionnel)
- Exemples: <body root="VIRTUAL_SHOP">
<xbifs name="products/pones/OLA " hook="product_l"/>
</body>
<body root="VIRTUAL_SHOP">
<xbifs name="VENDOR" position="150,150,10"/> </body>
<action>
- Description : L'élément <action> est utilisé pour spécifier le fichier SDML à charger en réponse à une action effectuée par l'utilisateur à partir de la scène courante. L'élément <action> associe un Identificateur de fichier SDML à un hook action fournit par le XBIFS père.
- Syntaxe:
<action url= « SDMLJilejd » hook= « hookjd »/> où :
- url spécifie l'identificateur du fichier SDML à charger en réponse à une action du client (requis)
- hook spécifie le hook, fournit par le XBIFS père, qui doit être associé à un fichier SDML.
- Elément Parent : <body>
<xbifs>
- Elément Fils : <field> (optionnel)
- Exemples: <body root="HOME_PAGE">
<text hook="user_name">Nemo</text>
<action hook="action_goto_menu" url="file: //menu.sdml"/>
</body>
<field>
- Description :
L'élément <field> spécifie les paramètres à ajouter à un fichier SDML (suivant la syntaxe normalisée des URL) . - Syntaxe:
<Nom de Field= « field_name» value= « field_value»/> où :
- Name spécifie le nom du field (requis)
- Value spécifie la valeur du field (par défaut NULL) - Elément Parent :
<action>
- Elément Fils : Aucun
- Exemples :
<body root="HOME_PAGE"> <text hook="user_name">Nemo</text>
<action hook="goto_my_menu" url="http: //www.server.com/user_menu"> <Nom de Field="user" value="Nemo"/>
<Nom de Field="id" value="512332"/> </action> </body>
<media>
- Description
L'élément <media> est utilisé pour insérer un média dans un XBIFS.
- Syntaxe <média name= "media_id" hook="hook_id" alt="alt_media_id"/> où : name spécifie l'identificateur d'un média (requis) - hook spécifie le hook fournit par le XBIFS père où le média doit être inséré (requis) - ait spécifie l'identificateur du média alternatif (optionnel)
- Elément Parent : <xbifs>
<body> - Elément Fils :
Aucun
- Exemples:
<body root="HOME_PAGE">
<média hook-"LOGO"name=''ext:http://wvvw.ft.com/img/logo.gif'alt= logo/logoFT"/>
</body>
Un document SDML se présente de manière générale sous la forme ou DTD (Document Type Déclaration) suivante :
<?xml version= »1.0 » encoding= »ISO-8859-l »?>
<!--
SDML (Scène Description Markup Language) DTD vl .0
— >
<!--
HISTORY
Vl .O : Création (Gabriel GUILLAUME DIH/HDM)
-->
<!- ENTITIES
— >
<!ENTITY % hookable « ( xbifs | text | action ) »>
ELEMENTS
->
<! ELEMENT sdml (head?,body)> <!ATTLIST sdml version CDATA ' l.O
<! ELEMENT head EMPTY>
<!ELEMENT body (%hookable;)*> <! ATTLIST body root CD ATA #REQUIRED>
<!ELEMENT text (#PCDATA)>
<! ATTLIST text hook CD ATA #REQUIRED>
<!ELEMENT xbifs (%hookable;)*> <!ATTLIST xbifs name CDATA #REQUIRED
hook CDATA #IMPLIED dependsOnMédia CDATA #IMPLIED dependsOnXBIFS CDATA #IMPLIED priority CDATA #IMPLIED position CDATA #IMPLIED>
<!ELEMENT action (field)*> <!ATTLIST action hook CDATA #REQUIRED priority CDATA #IMPLIED url CDATA #REQUIRED>
<!ELEMENT field EMPTY> <!ATTLIST field name CDATA #REQUIRED priority CDATA #IMPLIED value CDATA #REQUIRED>
Nous donnerons deux exemples de documents SDML, le premier relatif à une page Web personnelle et le second à une boutique virtuelle de téléphones mobiles .
Page Web personnelle :
<?xml version= »1.0 » encoding= »US-ASCII »?> <!DOCTYPE sdml SYSTEM « SDML.DTD »>
<sdml version= » 1.0 »>
<body root- »HOME_PAGE »>
<!-- nom de l'utilisateur — >
<text hook= »user_name »>Jean-Claude</text>
<!-- les liens — >
<text hook= »lien intitule 1 »>Ma Météo</text>
<action hook= »lien_actionl » url= »http ://www. server. fr/meteo . sdml »/>
<text hook- »lien_intitule2 »>Ma Bourse</text>
<action hook= »lien_action2 » url= » »http://www.server.fr/meteo.sdml »/>
</body> </sdml>
Dans ce document, un seul groupe (ou XBIFS) est spécifié, à savoir le groupe racine HOME_PAGE. Il comprend un élément textuel relatif au nom de l'utilisateur, deux autres éléments textuels ('Ma météo' et 'Ma bourse') et deux éléments de type 'action' associés à des liens ('http://www.server.fr/meteo.sdml', ' http ://www. server .fr/meteo . sdml ' ) vers d'autres scènes. Les 'hooks' définissent les relations de composition entre le groupe racine et ses différents éléments.
Boutique virtuelle :
<?xml version- »1.0 » encoding= »US-ASCÏÏ »?> <!DOCTYPE sdml SYSTEM « SDML.DTD »>
<sdml version- » 1.0 »>
<body root= »PHONES_SHOP/ROOM »>
<!— the spécial offers — >
<xbifs name- »PHONES_SHOP/COUNTER » hook- »special_offers »> <text hook="title">Special offers</text>
<xbifs name= »PHONES_SHOP/PRODUCT_DESC » hook= »place_l »>
<xbifs name= »PHONES_SHOP/PHONES/OLA » hook- »product »/>
<text hook- »price »>200 f</text>
<text hook- »name »>OLA</text> <action hook- »buy » url- »http://www.eopm.fr/PhonesShop »>
<Nom de Field- «action » value- »buy »/>
<Nom de Field- »product_name » value- »OLA »/>
<Nom de Field- »product_code » value- »FF4G6 »/>
</action> </xbifs>
<xbifs name- » PHONE_SHOP/PRODUCT_DESC » hook- »place_2 »>
<xbifs name- » PHONES_SHOP/PHONES/NOK7110 » hook- »product »/>
<text hook- »price »>2154 f</text>
<text hook- »name »>Nok 7110</text> <action hook- »buy » url- »http://www.eopm.fr/PhonesShop »>
<Nom de Field- »action » value- »buy »/>
<Nom de Field- »product_name » value- »nok7110 »/>
<Nom de Field- »product_code » value- »F2DD45 »/>
</action> </xbifs>
</xbifs>
<! — the new products — >
<xbifs name- »PHONES_SHOP/COUNTER » hook- »new_products »> <text hook="title">New products</text>
<xbifs name- »PHONES_SHOP/PRODUCT_DESC » hook- »place_l »>
<xbifs name- »PHONES_SHOP/PHONES/ERICS » hook- »product »/>
<text hook- »price »>200 $</text>
<text hook- »name »>ERICS</text> <action hook- »buy » url- «http://www.eopm.fr/PhonesShop »>
<Nom de Field- »action » value- »buy »/>
<Nom de Field- »product_name » value- »erics »/>
<Nom de Field- »product_code » value- »FJ9009 »/>
</action> </xbifs>
</xbifs>
<actionhook= «shopping_basket » url- «http://www.eopm.fr/PhonesShop7action-sb » />
</body> </sdml>
Ce document plus complexe décrit une boutique virtuelle
('PHONES SHOP/ROOM') , avec un département pour les offres spéciales
('special_offers' ) et un département pour les autres produits ('new_products' ). L'utilisateur peut acheter un téléphone en sélectionant un produit et contrôler le contenu son caddie à tout moment.
Le document utilise les groupes suivants:
- le groupe racine 'PHONES SHOP/ROOM' décrit la pièce principale de la boutique. Il comprend lui-même deux groupes (ici 2 instances de 'PHONES_SHOP/COUNTER' spécifiés par les liens de composition 'spécial offers' et 'new products') ainsi qu'un élément action ('shopping basket').
- le groupe 'PHONES_SHOP/COUNTER' décrit un comptoir de la boutique. Ce groupe comprend à son tour trois groupes (ici 3 instances de 'PHONES_SHOP/PRODUCT_DESC apparaissant en place et place_2 dans le département 'spécial offers' et en place_l pour le département 'new products'), ainsi qu'un élément textuel ('spécial offers' ou 'new products').
- le groupe 'PHONES_SHOP/PRODUCT_DESC décrit un produit. Ce groupe comprend lui même un autre groupe (décrivant un téléphone, voir ci- dessous), ainsi que 2 éléments textuels ('price' et 'name') et un élément action ('buy').
- les groupes PHONES_SHOP/PHONES/OLA, NOK7110, and ERICS décrivent des téléphones.