Schéma personnalisé Espace de noms


18

Le plomb (M. Mickolov Wroussakov) du projet, je travaille actuellement sur a spécifié un espace de noms personnalisé pour tous les schémas de contenu:

<xsd:schema elementFormDefault="qualified" 
targetNamespace="http://www.clientdomain.com/tridion/schemas" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns="http://www.clientdomain.com/tridion/schemas" 
xmlns:tcmi="http://www.tridion.com/ContentManager/5.0/Instance"> 

j'étais toujours l'impression qui est recommandé créer un espace de noms unique par schéma, ici tous mis en œuvre en utilisant l'élément ci-dessus.

Je ne vois pas de problèmes en tant que tels, je me demandais si cela pourrait ouvrir des problèmes à l'avenir.

+6

Question # 500 !! 05 juin. 132013-06-05 16:43:01

  0

Je dois demander pourquoi diable vous voudriez les rendre tous identiques au lieu de laisser les espaces de noms UUID par défaut que Tridion fait pour vous. Y a-t-il une raison de les changer? 05 juin. 132013-06-05 19:01:48

  0

@chris vous devrez demander à michelov :) 05 juin. 132013-06-05 19:15:23

12

Il n'y a aucune raison de ne pas utiliser un seul espace de noms pour plusieurs schémas, tant que ces schémas n'essaient pas de définir les mêmes types.

Un espace de noms est un mécanisme permettant à d'activer pour empêcher les collisions de noms. Si vous avez un autre facteur qui aide à prévenir de telles collisions, il n'y a aucune raison pour que les espaces de noms fassent tout le travail.

Le plus important est que vous ayez un design et que vous le suiviez. Si la moitié de vos développeurs s'attendent à un espace de noms par schéma, et que les autres utilisent également des noms d'éléments racine ou autres, vous avez des problèmes.

Un espace de noms n'est pas supposé identifier de façon unique un schéma ou un document. Une fonctionnalité "trouver des schémas par un espace de noms" peut sembler intelligente, mais je suggère de relire les recommandations avant de l'implémenter. Ce n'est certainement pas ce que les espaces de noms étaient destinés.

I do recommande de remplacer les URI d'espace de noms basées sur GUID par défaut de Tridion. La raison principale de ceci est que vous voudrez généralement les référencer dans le code, et les GUID sont un bugger correct pour taper avec précision et/ou vérifier visuellement. Idéalement, choisissez un système qui vous permet de prédire de façon fiable le tubage et autres choses semblables - cela vous facilite la vie. Utiliser un nom significatif est également bon. Il peut être utile que votre composant XML soit exporté vers un système externe: les gens sauront d'où il vient.

Une autre raison pour spécifier vos propres URI est si vous importez des données pour un schéma préexistant. Ayant dit tout cela, bien que je ne sois pas d'accord sur le fait que l'utilisation du même espace de nom pour plus d'un schéma est une idée terrible, je ne suis pas complètement convaincu que c'est une bonne idée. Le jugement doit être appliqué.

  0

Grande pensée Dominic, je suis totalement d'accord. Dans Tridion, nous avons l'habitude de mettre un espace de noms unique sur chaque schéma, mais ce n'est pas une bonne pratique XML, je dirais. Tout dépend de la granularité du schéma. D'un autre côté, dans Tridion, nous n'avons aucun moyen de collecter toutes les définitions XSD à partir des schémas pour vérifier si nous ne spécifions pas deux fois la même chose. Donc, sauf si vous faites XSD première conception, je considérerais aller avec des URI de schéma unique pour chaque schéma Tridion. 05 juin. 132013-06-05 22:36:11

  0

Eh bien alors vous devrez toujours savoir ce qu'il y a dans les autres schémas pour éviter de le répéter, ou rester avec le guid assigné. 06 juin. 132013-06-06 05:36:26


10

En fait, oui, cela pourrait poser des problèmes dans le futur. D'une part, nous cherchons à implémenter des fonctionnalités «Trouver un schéma par un espace de noms» sur CM et CD - avoir le même espace de noms pour tous les schémas «troubler» Tridion, à tout le moins.

J'ai vu aussi des problèmes avec Content PorterTranslation Manager (bien qu'il y avait d'autres choses qui se passent dans le même environnement), et l'une des choses que nous avons à résoudre ce problème était d'assurer que chaque schéma avait son propre URI de l'espace de noms.

Un URI d'espace de noms XSD est censé identifier de façon unique chaque document de ce type. Ce que vous faites peut vous faire gagner du temps maintenant, mais vous blesser dans le futur.

+3

Pourquoi nous spécifions un nom d'élément racine alors? J'aurais pensé que la combinaison de l'espace de noms et de l'élément racine permettrait d'identifier le document de manière unique ... 05 juin. 132013-06-05 18:39:26

+1

Étant donné que les espaces de noms ont été créés pour identifier de manière unique les documents XML basés sur un schéma, pourquoi le ferions-nous différemment? 05 juin. 132013-06-05 18:50:09

+3

Juste point, bien que je pense que la nature de Tridion (schémas incorporés par exemple) peut conduire à ce que les parties d'un schéma soient sémantiquement les mêmes que les parties d'autres schémas, donc mieux représentées comme faisant partie du même espace de noms. 05 juin. 132013-06-05 19:12:38

  0

Nuno - Avez-vous une chance d'obtenir des informations plus concrètes sur le problème Content Porter, et si elle a déjà été corrigée? 05 juin. 132013-06-05 21:43:56

  0

Droite. Ce n'était pas Content Porter :(c'était le gestionnaire de traduction Nous devions être capables de distinguer les documents par leur espace de noms, puisque le schéma n'est pas disponible du côté du gestionnaire de traduction 05 juin. 132013-06-05 21:47:21

+1

Réponse # 111 de M. Linhares! 06 juin. 132013-06-06 00:11:32


12

En utilisant le même espace de noms sur tous votre schéma est une idée TERRIBLE. Surtout si vous utilisez des technologies XML pour lire des valeurs du XML. Imaginez que vous ayez un Schéma de Sandwich et qu'un Schéma de Restaurant, les deux schémas ont un champ nommé "Nom". Maintenant, quelle que soit la raison, vous avez besoin de fusionner ces composants XML en un seul document. Tous les nœuds du document combiné seront dans le même espace de noms. Ainsi, la XPATH suivante correspondrait aux noeuds « Nom » du sandwich et le restaurant

<xsl:value-of select="//Name"/> 

Si vous avez utilisé correctement namespaces vous pouvez utiliser les requêtes XPath suivantes pour accéder à des nœuds spécifiques

<xsl:value-of select="//sandwich:Name"/> 

et

<xsl:value-of select="//restaurant:Name"/> 

Cet exemple est très simple (et une mauvaise pratique car il utilise //), mais illustre le point. Il deviendra plus important lorsque vous commencerez à utiliser apply-templates etc.

+1

Sûrement si vos schémas ont différents éléments racine cela peut fournir le contexte que vous avez besoin de différencier Restaurant/Name, Sandwich/Name 05 juin. 132013-06-05 18:38:32

  0

Par conséquent, pourquoi j'ai dit que c'est un échantillon trop simplifié - Considérons quelque chose comme <xsl: template match = "Nom"> ... 05 juin. 132013-06-05 19:00:12

+3

Ensuite, vous avez le meilleur des deux mondes Si vous voulez créer un template pour gérer les deux génériques, utilisez <xsl: template match = "Name">, si vous voulez avoir un template qui fonctionne uniquement sur le nom du restaurant, utilisez <xsl: template match = "Restaurant/Name"> 05 juin. 132013-06-05 19:11:23

  0

Si vous deviez utiliser des sandwichs et des restaurants dans le même document du côté de la sortie, vous orm les éléments à être dans les espaces de noms dictés par votre conception pour le XML de sortie. Il n'y a aucune raison pour que cela * soit * identique à l'espace de noms dans le composant Tridion. 08 juin. 132013-06-08 08:22:38