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é?
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.
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.
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.
Ce n'est pas une question stupide, mais John Saunders a raison!--2-->.
tout comme nous utilisons le-decleration pour lier XML à un DTD, comment le faisons-nous avec XSD?
Voici l'essence du problème - vous ne pouvez pas. L'un des problèmes de l'approche DTD était que le document précisait le mécanisme de validation et non le consommateur du document. Post-DTD, vous pouvez prendre un document XML et le valider avec XSD ou RELAX NG ou un autre mécanisme - ils sont découplés (en théorie du moins). Tout lien XSD n'est qu'un indice et est facultatif. Il n'est pas possible de valider un document arbitraire.