Warum Visual Studio dieses XML-Schema nicht mag? (Präfix '' kann nicht dem Namensraumnamen zugeordnet werden, der für "xml" oder "xmlns" reserviert ist)

8

FictionBook (auch bekannt als FB2) ist ein XML-basiertes Format von elektronischen Büchern. Sein Schema kann hier gefunden werden:

Ссылка

Als ich jedoch dieses Schema heruntergeladen und versucht habe, es in Visual Studio 2012 zu öffnen, bekam ich eine Reihe von Fehlern, von denen die erste war: Präfix '' kann nicht dem Namensraumnamen zugeordnet werden, der für "xml" oder reserviert ist "xmlns" Zeile 5, Position 118. E: \ dev \ fb2 \ FictionBook2.xsd .

Ist das Schema wirklich ungültig? Wenn ja, wie ist es möglich, dass eine Menge Software es benutzt, um FB2-Dateien zu validieren? Gibt es eine einfache Möglichkeit, das Schema zu ändern, um VS glücklich zu machen?

    
thorn 17.05.2013, 21:55
quelle

2 Antworten

5

Das einzige, was Sie tun müssen, ist xmlns="http://www.w3.org/XML/1998/namespace" aus FictionBookLang.xsd zu entfernen, da dies der einzige Schuldige ist:

Der Autor des Satzes wollte höchstwahrscheinlich sicherstellen, dass das Attribut xml: lang für Personen verfügbar gemacht wird. Es ist nicht der richtige Weg, aber trotzdem könnte es in bestimmten Szenarien funktionieren.

Normalerweise wird dies anders gemacht. Wenn Ihr XSD-fähiger XML-Prozessor "intelligent" ist, sollte ein solcher Import wie folgt durchgeführt werden, d. H. Anstelle von

%Vor%

sollte es sein:

%Vor%

Dies wird als dangling externe Referenz bezeichnet; "intelligente" XSD-Prozessoren wissen, wie man Orte in bekannte Namespaces auflöst (sicher ist Ссылка einer davon) .

So würde das Set aussehen, nachdem der Import des Danglings verwendet wurde; Die Datei xml.xsd wurde vom Prozessor automatisch hinzugefügt, und es sollte eine Kopie der hier aufgeführten hier vorhanden sein.

Mit anderen Worten, normalerweise sollte FictionBookLand.xsd nicht einmal Teil der Kompilation sein. Insbesondere, wenn Sie diese XSDs mit anderen kombinieren, die korrekt auf das xml: lang-Attribut verweisen, erhalten Sie einen doppelten Attribut-Deklarationsfehler.

Wie auch immer, wenn Sie nur das Attribut wie beschrieben entfernen, wird alles gültig; Von dort können Sie ein Beispiel-XML erstellen - die XSDs sind ansonsten in Ordnung. Das Sample, das ich erstellt habe, ist riesig, ich poste nur die ersten paar Zeilen ...

%Vor%     
Petru Gardea 22.05.2013, 18:25
quelle
1

Ich denke, das Problem könnte mit den Attributen targetNamespace=http://www.gribuser.ru/xml/fictionbook/2.0" und xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" im öffnenden Tag auftreten. Das Ausführen von xmllint --schema FictionBook2.xsd --auto gibt den folgenden Fehler:

%Vor%

Das Entfernen dieser Attribute löste diese Fehler, obwohl ich xmllint nicht vollständig dazu zwingen konnte, eine XML-Beispieldatei erfolgreich zu generieren.

    
Jesse Sweetland 19.05.2013 23:02
quelle