2016-08-09 7 views
0

スキーマに対してXMLファイルを検証しようとしています。私はこれで非常に新しいですが、私はそれがネームスペースと関係しているのはほぼ100%です。問題は、名前空間が私を混乱させることです:/。誰かがそれを検証するように設定する方法を親切に説明できますか?私は大いに感謝しています。ありがとう!XMLスキーマの名前空間 - 検証エラーの取得

マイ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> 

と私の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> 

答えて

0

あなたのスキーマがVCを指定:するminVersion = "1.1"。 XSD 1.1の機能は使用されませんので、この属性を削除するか、1.0に設定してみてください。

-xsdversion:1.1を有効にせずにSaxonを使用して検証を実行すると、問題を再現できました。この場合、Saxonを1.0プロセッサとして実行しており、1.0プロセッサ(vc:minVersionを認識した場合)は、1.1を必要とするスキーマの一部をスキップします。

したがって、もう1つの方法は、-xsdversionを使ってSaxonを実行することです:1.1。

検証がまだで、失敗します。

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. 

が、それが正当なエラーです:あなたはシーケンス(プロバイダ、ListingDetails、ChannelDetails)が再現可能になりたい場合は、その後、あなたの最初のxs:sequence要素はmaxOccurs="unbounded"属性を与えられるべきです。

+0

ありがとうございました。これはうまくいった! – Itsonlyme