2012-03-09 22 views
8

Sono stato alla ricerca per la risposta e non sono riuscito a trovare uno:XSD chiave/keyref supporto validazione intellisense in Visual Studio 2010

  • Esiste un supporto chiave XSD/keyref validazione tramite Intellisense in Visual Studio 2010?
  • Se sì, come farlo funzionare?
  • Se no, esiste un modo (incorporato) in Visual Studio per eseguire validazione di chiavi/riferimenti in un XML con uno schema XSD?

Grazie!

UPDATE: Si prega di notare che la domanda non è su come convalidare un XML con un file XSD. Sto chiedendo in particolare in merito allo key/keyref intellisense/qualunque sia il supporto in Visual Studio, che non sembra essere stato aggiunto affatto.

+0

possibile duplicato di [si può convalidare xsd contro xml in VS 2010?] (Http: //stackoverflow.com/questions/8988593/can-you-validate-xsd-against-xml-in-vs-2010) – DaveShaw

+2

Hai mai trovato una risposta a questo? Dopotutto sembra supportare XSD XSD dopo tutto ... –

+0

Nessuna risposta ancora, sto pensando che mentre sempre più persone lo confermano, non c'è risposta. Purtroppo. –

risposta

1

La funzionalità non è attualmente supportata in VS2010, né in VS2012 (come per il supporto tecnico MS).

Forse che lo supporteranno nelle prossime versioni ...

2

Visual Studio 2012 ora supporta la validazione delle istanze di documenti XML che sono soggette a chiave/keyref vincoli come definito in uno schema di riferimento.

Tuttavia, Visual Studio non fornisce alcun errore per il documento dello schema stesso, quando tale documento di schema utilizza key/keyref in modo non corretto, indipendentemente dal fatto che alcuni documenti soddisfino lo schema.

In particolare, elementi chiave/keyref come definito nello schema devono utilizzare namespace nel bilancio selettore XPath, secondo la seguente SO postale:

https://stackoverflow.com/a/4492004/344638

citare:

Inoltre - questo è un vincolo - I vincoli chiave non riconoscono lo spazio dei nomi predefinito. Devi sempre prefixare ogni parte del selettore xpath con il prefisso dello spazio dei nomi dell'elemento che stai cercando. Se non hai un prefisso del namespace - difficile, dovrai aggiungerne uno. Questa è una limitazione dello standard.

Il seguente post SO fornisce un esempio completo di uno schema che utilizza key/keyref, un'istanza di documento XML e un validatore manuale basato su C#. Lo schema e l'istanza del documento XML convalidare correttamente in Visual Studio - Visual Studio genera errori se il documento viola i principali vincoli keyref/dello schema:

https://stackoverflow.com/a/2866428/344638

0

Appena provato in VS 2013 e VS 2015. Hanno fatto convalidare key/refkey ora. Tuttavia mostrò avvertimenti a livello di genitore.

Ma come @antiduh ha detto, non controllano ancora il file xsd. Quindi hai davvero bisogno di assicurarti che la chiave/refkey in xsd sia corretta.

Ci sono volute le mie ore per capire un semplice esempio. Anche lo sample on MSDN non funziona. Ho dovuto modificarlo un po '.

Innanzitutto, assicurarsi di conoscere how to let Visual Studio validate an xml against an xsd of your choice.

Quindi utilizzare il seguente esempio xsd e xml per convalida chiave/tasto. Ricorda che l'avviso è sulla chiusura dell'elemento root, invece che sull'elemento che viola la regola key/ref.

file XSD è simile al seguente:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema 
     xmlns:xs="http://www.w3.org/2001/XMLSchema" 
     targetNamespace="namespace1" 
     xmlns:r="namespace1" 
     elementFormDefault="qualified"> 

    <xs:element name="root"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="A" type="r:A" maxOccurs="unbounded"/> 
     <xs:element name="B" type="r:B"/> 
     </xs:sequence> 
    </xs:complexType> 
    <xs:keyref name="dummy" refer="r:pNumKey"> 
     <xs:selector xpath="r:A/r:part"/> 
     <xs:field xpath="@ref-number"/> 
    </xs:keyref> 
    <xs:key name="pNumKey"> 
     <xs:selector xpath="r:B/r:part"/> 
     <xs:field xpath="@key-number"/> 
    </xs:key> 
    </xs:element> 

    <xs:complexType name="A"> 
    <xs:sequence> 
     <xs:element name="part" maxOccurs="unbounded"> 
     <xs:complexType> 
      <xs:simpleContent> 
      <xs:extension base="xs:string"> 
       <xs:attribute name="ref-number" type="xs:integer"/> 
      </xs:extension> 
      </xs:simpleContent> 
     </xs:complexType> 
     </xs:element> 
    </xs:sequence> 
    </xs:complexType> 

    <xs:complexType name="B"> 
    <xs:sequence> 
     <xs:element name="part" maxOccurs="unbounded"> 
     <xs:complexType> 
      <xs:simpleContent> 
      <xs:extension base="xs:string"> 
       <xs:attribute name="key-number" type="xs:integer"/> 
      </xs:extension> 
      </xs:simpleContent> 
     </xs:complexType> 
     </xs:element> 
    </xs:sequence> 
    </xs:complexType> 

</xs:schema> 

E il file XML è simile al seguente:

<?xml version="1.0" encoding="utf-8" ?> 
<root xmlns="namespace1"> 
    <A> 
    <!-- if the ref-number is equal to one of the key-number, the validation will pass --> 
    <part ref-number="1"/> 
    </A> 
    <A> 
    <!-- if the ref-number is not equal to one of the key-number, the validation will give error --> 
    <part ref-number="5"/> 
    </A> 
    <B> 
    <part key-number="1"/> 
    <part key-number="2"/> 
    <part key-number="3"/> 
    </B> 
</root><!--you will see warnings here--> 
Problemi correlati