Walidacja XML z XSD w Visual Studio IDE

96

Wiem, że robiłem to już wcześniej, ale dzisiaj nie działa, ani nie mogę znaleźć niczego, co wyjaśniłoby, jak to zrobić. Może to być mój brak snu, ale podejrzewam gremliny.

Mam dokument XML i katalog pełen XSD, które go definiują. Jak ustawić Visual IDE tak, aby powiadamiało mnie o błędach walidacji, a następnie dostarcza inteligentną listę prawidłowych tagów i atrybutów w danym kontekście?

Co próbowałem:

  • Dodałem XSD do projektu z dokumentem XML.
  • Dodałem XSD do listy schematów XML (w pozycji menu XML / Schemas ...).
  • Dodałem nawet atrybuty schemaLocation i noNamespaceSchemaLocation do dokumentu XML.

Program Visual Studio nadal nie rezygnuje z żadnych przydatnych informacji dotyczących debugowania ani edytowania. Próbowałem zarówno 2010, jak i 2008 (myślałem, że robiłem to wcześniej w 2008)

Aktualizacja: Poprosiłem innego programistę o wypróbowanie tego i dla niego też się nie udało. Wie, że zrobił to z innymi dokumentami XML i sprawił, że to zadziałało. Następnie pobrałem edytor Oxygen XML i działał dobrze na tych samych plikach XML i XSD, więc pliki wydają się być w porządku (lub Oxygen jest bardziej wybaczający / elastyczny.).

Jim McKeeth
źródło

Odpowiedzi:

138

Musisz skojarzyć dokument XML w programie Visual Studio z posiadanym plikiem XSD.

  1. W oknie Właściwości dokumentu XML powinieneś zobaczyć coś takiego:

    Właściwości XML> Schemat

  2. W edytorze zestawu schematów XML (otwieranym po kliknięciu (...) wielokropka w polu tekstowym „Schematy” w oknie Właściwości) upewnij się, że schemat jest obecny. Upewnij się również, że Usekolumna dla tego schematu jest włączona - jeśli nie, kliknij ją - pojawi się rozwijana lista opcji, wybierz tę Usez zielonym znacznikiem wyboru:

    Selektor schematu XML

  3. Upewnij się, że okna listy błędów programu Visual Studio są widoczne (widok menu> Lista błędów). Spowoduje to wyświetlenie wszystkich niespójności między definicjami schematów XML i XSD.

  4. Gdy to wszystko jest gotowe, edytor XML programu Visual Studio powinien podświetlić problemy z kodem XML w edytorze za pomocą niebieskich zawijasów:

    Przykład błędu

marc_s
źródło
Dzięki, to świetne szczegółowe wyjaśnienie, ale moje nadal nie działa. Nie wiedziałem, że możesz dostać się do listy schematów z takich właściwości.
Jim McKeeth
@Jim McKeeth: co się stanie, jeśli zmodyfikujesz swój XML i zapiszesz go ponownie? Czasami walidacja XML wymaga wyzwalacza, aby uruchomić ...
marc_s
Zaakceptowałem twoją odpowiedź, chociaż nie zadziałała. Domyślam się, że mój system został właśnie podłączony, ale przeniosłem się na nowy komputer i teraz wszystko działa dobrze.
Jim McKeeth
38
@jim Nie jestem pewien, czy miałeś ten sam problem, ale spędziłem absurdalną ilość czasu, zanim zdałem sobie sprawę, że plik XML musi być otwarty w edytorze, a fokus musi znajdować się w edytorze, kiedy wywołujesz okno Właściwości. Dopiero wtedy otrzymujesz właściwości „Dokument XML”, w których możesz przypisać schemat. Jeśli fokus znajduje się w Eksploratorze rozwiązań, okno Właściwości wyświetla tylko właściwości pliku, tj. Nie jest tam możliwe przypisanie schematu.
herzbube
2
Myślę, że w samej odpowiedzi należy dodać wyniki @ herzbube.
ashish
35

Nie musisz ręcznie kojarzyć plików w programie Visual Studio - automatycznie dopasuje plik XML do pliku XSD, jeśli oba są otwarte, a przestrzeń nazw jest poprawnie zdefiniowana.

Aby zdefiniować przestrzeń nazw:

W elemencie głównym pliku XML:

<Data xmlns='http://yourdomain.com/yourschema.xsd'>
    ...
</Data>

W elemencie schematu pliku XSD:

<xs:schema
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://yourdomain.com/yourschema.xsd"
    xmlns:this="http://yourdomain.com/yourschema.xsd"
    elementFormDefault="qualified">
    ...
</xs:schema>

Uwaga dotycząca używania typów w schemacie, gdy masz targetNamespace

Ponieważ targetNamespacew swoim schemacie określasz a, wszelkie odniesienia do typów zdefiniowanych w schemacie będą musiały być poprzedzone przestrzenią nazw (dlatego dodaliśmy xmlns:thisatrybut w powyższym <xs:schema />elemencie).

<!-- Define the type as normal -->
<xs:complexType name="Row">
    <xs:sequence>
        <xs:element name="Name" type="xs:string" minOccurs="1" maxOccurs="1" />
        <xs:element name="Value" type="xs:float" minOccurs="1" maxOccurs="1" />
    </xs:sequence>
</xs:complexType>
<!-- Use the type (note the "this:" prefix) -->
<xs:element name="Row" type="this:Row" minOccurs="0" maxOccurs="unbounded" />
Ross McNab
źródło
3

Kolejnym punktem niepowodzenia jest „blokowanie” plików schematu systemu Windows 7… kliknij prawym przyciskiem myszy plik xsd na dysku, Właściwości> Ogólne, a jeśli jest zablokowany, pojawi się przycisk „Odblokuj”. Powodowało to niepowodzenie weryfikacji XML w VS2012.

EJA
źródło
1

Czy twój xsd zawiera atrybut "targetNamespace" /schema/@targetNamespace podobny do przestrzeni nazw, do której odwołujesz się w xml?

Przykłady:

XSD :

<xs:schema .... targetNamespace="Datafile.xsd" ... >

XML :

<data xmlns="Datafile.xsd" >...</data>

Zobacz też: XML / XSD Intellisense nie działa w programie Visual Studio 2010

k3b
źródło
0

Miałem ten sam problem, ale VS już poprawnie odwoływał się do mojego schematu. Okazuje się, że plik, który próbowałem zweryfikować, nie miał rozszerzenia „xml”. Dodano .xml na końcu mojej nazwy pliku i sprawdzanie poprawności zaczęło działać.

John Livermore
źródło