如何指定文件的默认名称空间,以及如何将sites.xsd指定为默认名称空间的架构位置?

时间:2019-03-08 17:52:14

标签: xml xsd

  

因此,我正在尝试为我的代码执行此步骤:

     

在sites.xml文件中,将名称空间声明添加到根站点元素,将其关联   XML Schema名称空间的带有URI的xs前缀。指定默认名称空间   http://example.com/weekendfunsnacks/sites用于文件。将sites.xsd指定为   默认名称空间的架构。但是请继续获取此错误cvc-elt.1:找不到元素'sites'的声明。我很确定我的代码是正确的,但是您可以查看是否有问题。

 <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<sites xmlns:xs="http://www.w3.org/2001/XMLSchema"
xs:schemaLocation="http://example.com/weekendfunsnacks/sites sites.xsd"
xmlns ="http://example.com/weekendfunsnacks/sites">
    <site>
        <name>Weekend Fun Snacks</name>
        <totalPages>127</totalPages>
         <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
         <url>
            <loc>http://example.com/weekendfunsnacks/?cat=58</loc>
         </url>
         <url>
            <loc>http://example.com/weekendfunsnacks/?cat=2</loc>
            <lastmod>2017-12-29T06:03:34+00:00</lastmod>
         </url>
         <url>
            <loc>http://example.com/weekendfunsnacks/?cat=15</loc>
            <lastmod>2017-12-29T05:24:04+00:00</lastmod>
         </url>
         <url>
            <loc>http://example.com/weekendfunsnacks/?cat=93</loc>
         </url>
         <url>
            <loc>http://example.com/weekendfunsnacks/?cat=55</loc>
         </url>
      </urlset>
    </site>
    <site>
        <name>Paleo Snacks</name>
        <totalPages>52</totalPages>
              <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
         <url>
            <loc>http://example.com/primalsnacks/?cat=6</loc>
         </url>
         <url>
            <loc>http://example.com/primalsnacks/?cat=18</loc>
            <lastmod>2017-09-19T17:13:19+00:00</lastmod>
         </url>
         <url>
            <loc>http://example.com/primalsnacks/?cat=54</loc>
            <lastmod>2017-09-19T15:24:01+00:00</lastmod>
         </url>
         <url>
            <loc>http://example.com/primalsnacks/?cat=52</loc>
            <lastmod>2017-09-28T21:03:11+00:00</lastmod>
         </url>
         <url>
            <loc>http://example.com/primalsnacks/?cat=201</loc>
            <lastmod>2017-10-06T07:03:26+00:00</lastmod>
         </url>
         <url>
            <loc>http://example.com/primalsnacks/?cat=11</loc>
         </url>
      </urlset>
    </site>
    <site>
        <name>Veg Snacks</name>
        <totalPages>17</totalPages>
              <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
         <url>
            <loc>http://example.com/vegsnacks/?cat=102</loc>
         </url>
         <url>
            <loc>http://example.com/vegsnacks/?cat=23</loc>
         </url>
         <url>
            <loc>http://example.com/vegsnacks/?cat=1</loc>
         </url>
         <url>
            <loc>http://example.com/vegsnacks/?cat=55</loc>
            <lastmod>2017-06-12T08:05:32+00:00</lastmod>
         </url>
         <url>
            <loc>http://example.com/vegsnacks/?cat=201</loc>
         </url>
         <url>
            <loc>http://example.com/vegsnacks/?cat=87</loc>
         </url>
      </urlset>
    </site>
</sites>
  

在我的xsd中,我也只收到此错误“与元素类型“ xs:schema”相关联的属性“ cc:targetNamespace”的前缀“ cc”未绑定。”但我也对步骤感到困惑,想知道您能否澄清他们在询问该步骤的内容:

     

5。在sites.xsd文件的根元素中,将目标名称空间指定为http://example.com/weekendfunsnacks/sites,然后将前缀cc与目标名称空间相关联。将前缀sm与命名空间http://www.sitemaps.org/schemas/sitemap/0.9.Specify关联,元素默认情况下是合格的,而属性默认情况下是不合格的。   我不确定他们指的是哪个前缀,并且xsd中没有任何不合格的属性。

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

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
cc:targetNamespace="http://example.com/weekendfunsnacks/sites"
sm:xmlns ="http://www.sitemaps.org/schemas/sitemap/0.9">

<xs:import namespace="http://www.sitemaps.org/schemas/sitemap/0.9"
 schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" />

   <xs:element name="sites">
      <xs:complexType>
         <xs:sequence>
            <xs:element name="site" maxOccurs="unbounded" minOccurs="0">
               <xs:complexType>
                  <xs:sequence>
                     <xs:element type="xs:string" name="name"/>
                     <xs:element type="xs:byte" name="totalPages" ref="sitemap"/>
                  </xs:sequence>
               </xs:complexType>
            </xs:element>
         </xs:sequence>
      </xs:complexType>
   </xs:element>
</xs:schema>

1 个答案:

答案 0 :(得分:0)

通过将XML文件的顶部更改为

,我可以使您的示例工作(这里假设sites.xsd在同一目录中。)
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
  <sites xmlns:xs="http://www.w3.org/2001/XMLSchema"
xs:schemaLocation="file://sites.xsd" xmlns ="http://example.com/weekendfunsnacks/sites">

在这里,xs:schemaLocation指定XSD的路径,而xmlns:设置默认名称空间。在XSD中,我从sm:的属性中删除了(错误的)命名空间cc:xs:schema

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
targetNamespace="http://example.com/weekendfunsnacks/sites" xmlns ="http://www.sitemaps.org/schemas/sitemap/0.9">

请参阅这些属性的here for an explanation。因此,应用于示例的targetNamespace="http://example.com/weekendfunsnacks/sites"指定此架构定义的元素与XML中的元素来自相同的名称空间。

应用这些修复程序,XML就会验证。