2014-04-25 3 views
0

Je travaille avec XML pour la première fois pour un projet de travail. J'ai l'impression d'avoir les bases bas mais une chose me fait toujours me gratter la tête. Si vous êtes using an schema to designate a namespace, comment un analyseur XML sait-il où trouver le fichier de schéma afin qu'il puisse valider ce qui y est introduit? Je comprends qu'à un niveau, la seule chose qui compte est que les éléments avec des noms globalement non uniques soient associés à un espace de noms dans lequel ils sont uniques, mais l'analyseur n'a pas besoin de savoir si l'élément est réellement un espace de noms membre? Comment cela se passe-t-il exactement, étant donné que la convention de nommage pour les espaces de noms est généralement une URL qui (probablement) n'a rien à voir avec le schéma en question, sinon comme une chaîne unique de caractères? En d'autres termes, comment un analyseur qui doit valider un fichier XML trouve-t-il le (s) schéma (s) associé (s) à ce fichier?comment un analyseur XML sait-il où trouver un fichier de schéma?

Répondre

1

Il existe de nombreux mécanismes possibles et cela dépend du processeur de schéma que vous utilisez. Le traitement de schéma est parfois intégré à l'analyse XML, mais conceptuellement, il s'agit d'une opération distincte qui peut être effectuée indépendamment. L'un des moyens que beaucoup de gens utilisent, mais que je n'aime pas beaucoup, est l'attribut xsi: schemaLocation où le document d'instance XML définit lui-même un mappage entre les URI d'espace de noms et les emplacements de schéma. Je ne l'aime pas parce que si vous validez un document, vous ne devriez pas lui faire suffisamment confiance pour vous dire quel schéma utiliser pour la validation.

La plupart des processeurs de schéma sont susceptibles d'avoir une sorte d'API ou une interface de ligne de commande qui vous permet de fournir des emplacements de schéma. Par exemple, si vous utilisez Saxon alors il est

...Validate -s:source.xml -xsd:schema.xsd 

où schema.xsd est le document de schéma de niveau supérieur qui comprend/importations tout autre document de schéma nécessaires. Il n'y a pas de liaison explicite aux espaces de noms ici: Saxon va lire les documents de schéma fournis et déterminer quelles définitions s'appliquent à quels espaces de noms.

+0

neato-burrito! D'accord, pour que je vous comprenne, il est possible que le fichier XML lui-même pointe vers un fichier de schéma, mais cela n'est pas souhaitable. la méthode préférée consiste à pointer l'analyseur vers les emplacements de fichier afin que, lorsqu'il lit les balises d'espace de noms dans le fichier XML, il puisse les faire correspondre aux balises 'targetNamespace' dans le fichier de schéma et les valider. merci d'avoir éclairci ça pour moi! les documents didactiques n'étaient pas très utiles pour comprendre comment cela s'est passé :-p –

Questions connexes