2010-08-19 1 views
3

Je suis engagé dans un débat sur les représentations XML de groupes d'objets. Étant donné une hiérarchie d'objets comme Artiste, Album et Piste, avec une grande connectivité entre l'objet, quels sont les avantages et les inconvénients de formater la représentation XML d'un graphe d'objet donné avec du XML profond par rapport à des références d'objet. Je suis fermement dans le camp de référence d'objet, alors que d'autres content que ce modèle est en quelque sorte moins "RESTful" et qu'il ne devrait être poursuivi s'il y a une raison impérieuse pas pour utiliser la version des objets profonds.Y a-t-il des avantages cachés aux représentations XML profondes par rapport aux représentations superficielles avec des références intra-document?

Je considère ce qui suit comme des lacunes fondamentales de la part des objets profonds

  • Les références circulaires signifient qu'il y aura peut y avoir plusieurs versions d'un même objet dans le graphique. Certains objets seront nécessairement incomplets.
  • Si vous choisissez d'éviter les références circulaires en ne disposant que d'une seule version canonique d'un objet donné dans le graphique, vous devez appliquer la logique pour déterminer quelle instance du graphique doit être considérée comme canonique. De plus, si vous créez un service, vous placez ce fardeau sur les clients et les serveurs. En outre, cette logique doit résoudre des tonnes d'ambiguïtés. Quelle instance d'un objet devrait être canonique? Le premier rencontré en traversée pré-commande? Le plus proche de la racine (largeur première traversée)? Une relation parent-enfant particulière?
  • Il n'y a pas de représentation canonique d'un objet donné, ce qui réduit les possibilités de mise en cache sur le client et le serveur.
  • Toute logique pour obtenir une propriété profonde doit être capable de se rabattre sur l'extraction de l'objet profond contenant comme un élément de niveau supérieur parce que vous ne savez jamais si la propriété profonde va être là
  • Le schéma devient inutile car chaque La connexion entre les objets doit nécessairement être configurée pour se produire au moins 0 fois afin d'éviter une régression infinie des références circulaires.

Ma question est essentiellement, sont-il des arguments importants pour la représentation peu profonde que je l'ai manqué, et quels sont les contre-arguments

Voici un petit exemple d'un objet profond

<artist id="1234">   <!-- This object is of type Artist in the Schema--> 
    <name>Lady GaGa</name> 
    <sampleTrack id="1235">  <!-- This object is of type Track in the Schema--> 
    <name>Poker Face</name> 
    <album id="1236">  <!-- This object is of type Album in the Schema--> 
     <name>The Fame Monster</name> 
     ... 
    </album> 
    </sampleTrack> 
    <album id="1236"> 
    .... 
    <track id="1235"> 
    </track> 
    </album> 
</artist> 

Voici un exemple similaire d'utiliser des références d'objets

Lady GaGa

<track id="1235">   <!-- This object is of type Track in the Schema--> 
    <name>Poker Face</name> 
    <album id="1236"/>  <!-- This object is of type Reference in the Schema--> 
</track> 

<album id="1236"> 
    <name>The Fame Monster</name> 
    <track id="1235"> 
</album> 
+0

Vous êtes en train de revisiter l'ancien débat sur la base de données hiérarchique (IMS) vs relationnel (SQL) à partir des années 1970. Bien que certains seront en désaccord, Relational a gagné cette décision il y a longtemps. –

+0

Pourriez-vous peut-être pointer vers des articles informatifs sur le débat? En outre, je ne suis pas sûr que la comparaison soit juste, puisque ma lecture d'un modèle hiérarchique est que chaque élément a exactement un parent, résultant en un graphisme dirigé avec un (des) objet (s) racine (s) canonique (s). Mon modèle d'objet n'est pas dirigé et, selon le cas d'utilisation, l'un des types peut être en haut du sous-graphique retourné. – Jherico

Répondre

1

En termes de repos où les ressources peuvent être consultées par URI, je côte avec vous avec des références.Ce que j'ai vu des gens faire est utiliser les liens:

Si l'URI suivant peut être utilisé pour rechercher un album: - http://www.example.com/albums/1236

Ensuite, la représentation XML pour http://www.example.com/tracks/1235 peut ressembler à:

<track id="1235"> 
    <name>Poker Face</name> 
    <album link="http://www.example.com/albums/1236"/> 
</track> 

en suivant le lien album que vous obtenez:

<album id="1236"> 
    <name>The Fame Monster</name> 
    <track link="http://www.example.com/tracks/1235"> 
</album> 
1

beaucoup de xml que j'ai créé est conçu pour être traité par Feuilles de style XSLT. Là où c'est le cas, vous avez un avantage pour la représentation profonde, car XSL peut traiter de façon beaucoup plus concise (et efficace?) Les relations de profondeur que les relations référencées.

Cette considération peut être importante ou non pour vous. Je suppose que cela dépend si le XML sera analysé en tant qu'arborescence de documents ou non.

Questions connexes