【问题标题】:XML schema namespace- Getting validation errorXML 模式命名空间 - 出现验证错误
【发布时间】:2019-07-06 19:16:12
【问题描述】:

我正在尝试根据架构验证 XML 文件。我对此非常陌生,但我几乎 100% 都与命名空间有关。问题是,命名空间让我感到困惑:/。有人可以解释如何设置它以便验证吗?

我的 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>

【问题讨论】:

    标签: xml validation schema


    【解决方案1】:

    您的架构指定 vc:minVersion="1.1"。它不使用任何 XSD 1.1 功能,因此请尝试删除此属性或将其设置为 1.0。

    我能够通过使用 Saxon 运行您的验证而不启用 -xsdversion:1.1 来重现该问题。在这种情况下,您将 Saxon 作为 1.0 处理器运行,而 1.0 处理器(如果它完全识别 vc:minVersion)将跳过需要 1.1 的部分模式。

    因此,另一种方法是使用 -xsdversion:1.1 运行 Saxon。

    验证仍然失败,出现:

    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. 
    

    但这是一个合理的错误:如果您希望序列(Provider、ListingDetails、ChannelDetails)是可重复的,那么您的第一个 xs:sequence 元素应该被赋予一个 maxOccurs="unbounded" 属性。

    【讨论】:

      猜你喜欢
      • 2012-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多