Comment relier XML à un XSD?

je me demandais, tout comme nous utilisons la-declaration pour lier XML à une DTD, comment faire avec XSD?

MSDN sample:

<?xml version="1.0"?>
<Product ProductID="123" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="Product.xsd">
    <ProductName>Rugby jersey</ProductName>
</Product> 

est-il xsi:NoNamespaceSchemaLocation qui fait le tour? Ou c'est juste un autre namespace?

[modifier] Et est le

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

..la ligne juste pour nous donner un espace de nom XML unique, ou fournit-elle aussi des informations sur l'endroit où le schéma peut être localisé?

19
demandé sur ROMANIA_engineer 2009-04-12 00:48:28

4 réponses

schemaLocation.

<?xml version="1.0"?>

<note
xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com note.xsd">
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

nonamespaceschimalocation is different. Notez que les deux ne sont en effet que des "indices" en théorie, pour un consommateur D'un document XML. Je n'ai jamais rencontré de processeur xml qui ne les suivait pas; après tout, c'est une recommandation du W3C. voir http://www.w3.org/TR/xmlschema-1/

mais en effet, il aller mal, comme ici, mais encore une fois, c'est considéré comme un bug pour un raison.

Pour faire court : je viens de confiance en elle, avec pas mal pour l'instant :-)

Je ne pense pas qu'un processeur xml à moitié décent puisse ignorer cet "indice" ces jours-ci.

les urls sont toujours pour l'unicité, mais dans certains cas, certaines informations seront fournies sous L'URL.

17
répondu Peter 2013-10-16 19:55:24

xsi: noNamespaceSchemaLocation et xsi: schemaLocation fournissent toutes deux des indices aux processeurs XML qui décident d'obéir à ces indices. Mais ils ne sont que des indices. Ils n'entraînent pas nécessairement la validation de votre document par rapport au schéma.

4
répondu John Saunders 2009-04-11 20:53:19

en général, j'inclus juste l'espace de noms et je m'attends à ce que si quelqu'un le traite pour le valider, alors ils obtiendront le schéma et configureront leur environnement de traitement pour qu'il puisse trouver le XSD. J'ai eu un succès limité avec xsi:schemaLocation et ces attributs. La plupart des problèmes sont généralement centrés sur la recherche du fichier XSD lui-même. Certains processeurs veulent que le chemin soit inclus, ce qui est très amusant si le XSD est sur un système de fichiers au lieu d'un serveur web.

Tous les le processeur semble implémenter la recherche un peu différemment. Certains utilisent des objets de catalogue de schéma séparés, d'autres vous demandent de charger et d'attacher des schémas séparément. À moins que vous ne fournissiez le code pour traiter les documents, il est préférable de ne pas inclure xsi:schemaLocation ou xsi:noNamespaceSchemaLocation à mon humble avis. La seule chose que leur inclusion peut faire est de paralyser qui que ce soit qui est en train de traiter votre document, soit en plaçant le schéma au même endroit, soit en trouvant un moyen de faire ignorer ou contourner le localisation cahier des charges.

en guise de note, le plus gros problème que j'ai rencontré était en fait avec les DTDs qui étaient spécifiés en utilisant un SYSTEM déclaration visée à "c:\somepath\doc.dtd". Le problème était que je traitais les documents sur une boîte FreeBSD. J'ai fini par écrire mon propre résolveur pour mapper des chemins de style Windows vers un système de fichiers local puisque je ne pouvais pas modifier les documents eux-mêmes et que je devais les valider.

3
répondu D.Shawley 2009-04-11 21:17:34