2013-06-05 28 views
1

我想用RELAX NG結構來驗證xml。如何使用RELAX NG驗證Google購物XML?

我曾試圖像這樣一個變化:

<grammar ns="" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> 
    <start> 
     <element name="rss" version="2.0" xmlns:g="http://base.google.com/ns/1.0"> 
      <element name="channel"> 
       <element name="title"> 
        <data type="token"/> 
       </element> 

       <element name="description"> 
        <data type="token"/> 
       </element> 

       <element name="link"> 
        <data type="anyURI"/> 
       </element> 

       <oneOrMore> 
        <element name="item"> 
         <element name="g:id"> 
          <data type="long"/> 
         </element> 

         <element name="title"> 
          <data type="token"/> 
         </element> 

解釋所述標籤時的第一個問題是 「g:ID」,例如,我解決把的xmlns:G =「HTTP:// base.google.com/ns/1.0「rss元素。

但我們可以在manual看到的,我們需要把版本=「2.0」在RSS元素標籤了。但是,如果我嘗試使用

<element name="rss" version="2.0" xmlns:g="http://base.google.com/ns/1.0"> 

我得到的錯誤:

PHP Warning: DOMDocument::relaxNGValidate(): Unknown attribute version on element in ... 

如果我使用

<element name="rss" xmlns:g="http://base.google.com/ns/1.0"> 

我沒有錯誤,但= 「2.0」 是由需要手冊。

我該如何解決這個問題?

回答

1

我發現自己

例下面的解決方案

<grammar ns="" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> 
    <start> 
     <element name="rss" xmlns:g="http://base.google.com/ns/1.0"> 
      <attribute name="version"> 
       <data type="decimal"/> 
      </attribute> 
      <element name="channel"> 
       <element name="title"> 
        <data type="token"/> 
       </element> 

       <element name="description"> 
        <data type="token"/> 
       </element> 

       <element name="link"> 
        <data type="anyURI"/> 
       </element> 

       <oneOrMore> 
        <element name="item"> 
         <element name="g:id"> 
          <data type="long"/> 
         </element> 

         <element name="title"> 
          <data type="token"/> 
         </element>