2016-08-09 100 views
0

Ich versuche, eine XML-Datei gegen ein Schema zu validieren. Ich bin sehr neu darin, aber ich bin fast 100% es hat mit dem Namensraum zu tun. Problem ist, Namespaces verwirren mich: /. Kann jemand freundlicherweise erklären, wie man es so einstellt, dass es validiert wird? Ich würde es sehr schätzen. Vielen Dank!XML-Schema-Namespace- Getting Validierung erorr

Meine XML:

<?xml version="1.0" encoding="UTF-8"?> 

<tvGuide xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="tvguide.xsd"> 
    <Provider TimeZone="central">  
     <ProviderName>Cox Communications</ProviderName> 
     <State>NE</State> 
    </Provider> 
    <ListingDetails> 
     <ShowName>American Horror Story</ShowName> 
     <category>Drama</category> 
     <HD>true</HD> 
     <Rating>TV-MA</Rating> 
     <New>false</New> 
     <EpisodeNumber>37</EpisodeNumber> 
     <Season>5</Season> 
     <Date>2016-07-25</Date> 
     <EpisodeDesc>Insert Episode Description Here</EpisodeDesc> 
     <Audio>Stereo</Audio> 
     <ClosedCaption>true</ClosedCaption> 
    </ListingDetails> 
    <ChannelDetails> 
     <ChannelName>FX</ChannelName> 
     <ChannelDescription>Channel Description Here</ChannelDescription> 
     <ChannelLogo>Channel Logo Here</ChannelLogo> 
    </ChannelDetails> 
    <Provider TimeZone="central">  
     <ProviderName>Cox Communications</ProviderName> 
     <State>NE</State> 
    </Provider> 
    <ListingDetails> 
     <ShowName>The Arctic Circle</ShowName> 
     <category>Documentary</category> 
     <HD>false</HD> 
     <Rating>TV-G</Rating> 
     <New>true</New> 
     <EpisodeNumber>1</EpisodeNumber> 
     <Season>0</Season> 
     <Date>2016-07-25</Date> 
     <EpisodeDesc>This documentary takes viewers on an expedition to the Arctic Cirlee</EpisodeDesc> 
     <Audio>Stereo</Audio> 
     <ClosedCaption>true</ClosedCaption> 
    </ListingDetails> 
    <ChannelDetails> 
     <ChannelName>NatGeo</ChannelName> 
     <ChannelDescription>Educational</ChannelDescription> 
     <ChannelLogo>Channel Logo Here</ChannelLogo> 
    </ChannelDetails> 
    <Provider TimeZone="central">  
     <ProviderName>Cox Communications</ProviderName> 
     <State>NE</State> 
    </Provider> 
    <ListingDetails> 
     <ShowName>Dick Van Dyke</ShowName> 
     <category>Classic Family</category> 
     <HD>true</HD> 
     <Rating>TV-G</Rating> 
     <New>false</New> 
     <EpisodeNumber>12</EpisodeNumber> 
     <Season>1</Season> 
     <Date>2016-07-25</Date> 
     <EpisodeDesc>This is a classic episode of Dick Van Dyke.</EpisodeDesc> 
     <Audio>Stereo</Audio> 
     <ClosedCaption>true</ClosedCaption> 
    </ListingDetails> 
    <ChannelDetails> 
     <ChannelName>Nick at Nite</ChannelName> 
     <ChannelDescription>Classic TV</ChannelDescription> 
     <ChannelLogo>Channel Logo Here</ChannelLogo> 
    </ChannelDetails> 
</tvGuide> 

und meine XSD:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" elementFormDefault="qualified" 
    vc:minVersion="1.1"> 


     <xs:element name="tvGuide"> 
      <xs:complexType> 
       <xs:sequence> 
        <xs:element name="Provider" maxOccurs="unbounded"> 
         <xs:complexType> 
          <xs:sequence> 
           <xs:element name="ProviderName" type="xs:string"/> 
           <xs:element name="State" type="xs:string"/> 
          </xs:sequence> 
          <xs:attribute name="TimeZone" type="xs:string" use="required"/> 
         </xs:complexType> 
        </xs:element> 
       <xs:element name="ListingDetails" maxOccurs="unbounded" > 
       <xs:complexType> 
        <xs:sequence> 
         <xs:element name="ShowName" type="xs:string"/> 
         <xs:element name="category" type="xs:string"/> 
         <xs:element name="HD" type="xs:boolean"/> 
         <xs:element name="Rating" type="xs:string"/> 
         <xs:element name="New" type="xs:boolean"/> 
         <xs:element name="EpisodeNumber" type="xs:integer"/> 
         <xs:element name="Season" type="xs:integer"/> 
         <xs:element name="Date" type="xs:date"/> 
         <xs:element name="EpisodeDesc" type="xs:string"/> 
         <xs:element name="Audio" type="xs:string"/> 
         <xs:element name="ClosedCaption" type="xs:boolean"/> 
        </xs:sequence> 

       </xs:complexType> 
      </xs:element> 
        <xs:element name="ChannelDetails" maxOccurs="unbounded" > 
         <xs:complexType> 
          <xs:sequence> 
           <xs:element name="ChannelName" type="xs:string"/> 
           <xs:element name="ChannelDescription" type="xs:string"/> 
           <xs:element name="ChannelLogo" type="xs:string"/> 
          </xs:sequence> 
         </xs:complexType> 
        </xs:element> 

       </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
    </xs:schema> 

Antwort

0

Ihr Schema gibt vc: minVersion = "1.1". Es verwendet keine XSD 1.1-Funktionen, also versuchen Sie, dieses Attribut zu entfernen oder auf 1.0 zu setzen.

Ich konnte das Problem reproduzieren, indem Sie Ihre Validierung mit Saxon ausführen, ohne -xsdversion: 1.1 zu aktivieren. In diesem Fall wird Saxon als 1.0-Prozessor ausgeführt, und ein 1.0-Prozessor (wenn es überhaupt vc: minVersion erkennt) überspringt Teile des Schemas, die 1.1 erfordern.

Also der andere Weg nach vorne ist Saxon mit -xsdversion: 1.1 zu laufen.

Validierung fehlschlägt, mit:

Validation error on line 27 column 34 of test.xml: 
    FORG0001: In content of element <tvGuide>: The content model does not allow element 
    <Provider> to appear immediately after element <ChannelDetails>. Expected <ChannelDetails> 
    or nothing. 

aber das ist ein legitimer Fehler: Wenn Sie die Reihenfolge wollen (Provider, ListingDetails, ChannelDetails) wiederholbar sein, dann ist Ihr erstes xs:sequence Element sollte ein maxOccurs="unbounded" Attribut angegeben werden .

+0

Vielen Dank. Das hat funktioniert! – Itsonlyme