Comment liez-vous fichier XML XSD?
Demandais, tout comme nous utilisons la déclaration de lier une DTD XML, comment pouvons-nous le faire avec XSD?
MSDN exemple:
<?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 est-ce juste un autre espace de noms?
[MODIFIER]
Et est la
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
..juste pour nous donner un unique espace de noms XML, ou faut-il également fournir des informations sur l'endroit où le schéma peut être situé?
Vous devez vous connecter pour publier un commentaire.
Essayer schemaLocation.
noNamespaceSchemaLocation est différent. Notez que les deux sont en fait que des "indices", en théorie, à un consommateur d'un document XML. Je n'ai jamais couru dans un processeur xml qui ne les suit pas; après tout, c'est une recommandation du W3C.
voir http://www.w3.org/TR/xmlschema-1/
Mais en effet, il pourrait aller mal, comme ici, mais là encore, il est considéré comme un bug pour une raison.
Pour faire court : je viens de confiance en elle, avec pas mal pour l'instant 🙂
Je ne pense pas qu'un demi-décent processeur xml peut ignorer cette "astuce" ces jours-ci.
Les url sont toujours de l'unicité, mais dans certains cas, des informations seront fournies en vertu de l'URL.
xsi:noNamespaceSchemaLocation et xsi:schemaLocation à la fois fournir des conseils pour les processeurs XML qui décident d'obéir à ces conseils. Mais ils ne sont que des indices. Ils ne sont pas nécessairement la cause de votre document à valider sur le schéma.
J'en général il suffit d'inclure l'espace de noms et s'attendre à ce que si quiconque est en cours de traitement, il se soucie de valider, puis ils vont obtenir le schéma et l'ensemble de leur environnement de traitement afin qu'il puisse trouver le XSD. J'ai eu un succès limité avec
xsi:schemaLocation
et de tels attributs. La plupart des problèmes sont généralement centré autour de trouver le fichier XSD lui-même. Certains processeurs voulez le chemin pour être inclus, ce qui est beaucoup de plaisir, si le XSD est un système de fichiers au lieu d'un serveur web.Chaque processeur semble pour mettre en œuvre la recherche d'un peu différemment. Certains utilisent le schéma distinct catalogue des objets, d'autres exigent de la charge et de joindre des schémas séparément. Sauf si vous fournissez le code pour le traitement des documents, vous êtes mieux de ne pas inclure
xsi:schemaLocation
ouxsi:noNamespaceSchemaLocation
à mon humble avis. La seule chose qui leur inclusion pouvez faire est de l'ischio-jambiers qui est le traitement de votre document en plaçant le schéma dans le même emplacement ou de trouver un moyen de rendre leur processeur choisi d'ignorer ou de contourner l'emplacement de la spécification.Comme une note de côté, le plus gros problème que j'ai couru en a été fait avec les Dtd qui ont été spécifiés à l'aide d'un
SYSTEM
déclaration visée à"c:\somepath\doc.dtd"
. Le problème était que j'étais traitement des documents sur une machine FreeBSD. J'ai fini par écrire mon propre résolveur de carte de style Windows chemins d'accès à un système de fichiers local puisque je ne pouvais pas modifier les documents eux-mêmes et a été nécessaire pour valider.Ce n'est pas une question stupide, mais John Saunders a droite.
Ici est l'essence même du problème - vous pouvez pas. L'un des problèmes avec la DTD approche est que le document spécifié, le mécanisme de validation et de ne pas le document de consommation. Post-DTD, vous pouvez prendre un document XML et de les valider avec XSD ou RELAX NG ou d'un autre mécanisme - ils sont indépendants (au moins en théorie). Tout lien XSD est qu'une indication et est facultative. Il n'est pas possible de valider un document arbitraire.