2012-01-11 72 views
0

有沒有一種方法可以使用Xml爲數據庫動態創建表和結構?如何在Cakephp中使用XML自動創建數據庫的表和結構

因此,使用Xml作爲參考生成列。

就像Cakephp中可用的那樣?

下面是示例XML,我打算使用:(我沒有複製粘貼所有的人,因爲它是相當大的)

</dsr_data_agg_stats> 
     <state code="ACT"> 
     <post_code code="2600"> 
      <locality name="DEAKIN"> 
      <dwelling_type code="H"> 
       <typical_value rank="3341/3697">831000</typical_value> 
       <dom score="1" rank="454/5673">56</dom> 
       <discount score="0" rank="779/5673">5%</discount> 
       <acr score="-1" rank="914/5531">59%</acr> 
       <renters score="0" rank="5131/5627">42%</renters> 
       <vacancy score="1" rank="4714/5673">2.61%</vacancy> 
       <yield score="-1" rank="678/3697">3.69%</yield> 
       <som score="1" rank="3915/5144">2.08%</som> 
       <search_dsr score="-3" rank="3578/4009">4.9</search_dsr> 
       <dsr rank="3121/5673">23</dsr> 
       <sr rank="2552/5673">5.8</sr> 
      </dwelling_type> 
      </locality> 
      <locality name="YARRALUMLA"> 
      <dwelling_type code="H"> 
       <typical_value rank="3438/3697">931250</typical_value> 
       <dom score="1" rank="454/5673">56</dom> 
       <discount score="0" rank="779/5673">5%</discount> 
       <acr score="-2" rank="1999/5531">42%</acr> 
       <renters score="0" rank="5131/5627">42%</renters> 
       <vacancy score="1" rank="4714/5673">2.61%</vacancy> 
       <yield score="1" rank="678/3697">4.76%</yield> 
       <som score="0" rank="4333/5144">3.03%</som> 
       <search_dsr score="-3" rank="3277/4009">7</search_dsr> 
       <dsr rank="3121/5673">23</dsr> 
       <sr rank="2552/5673">5.8</sr> 
      </dwelling_type> 

...

回答

0

我正在做類似的東西,但與RSS源。我發現我非常喜歡redis語法,它可以讓你根據自己的喜好使用複雜和嚴格的詞彙表,但具有訪問任何主要現代數據類型的所有優點,可以平鋪在散列表上地圖。在很多不同的語言中都有非常易於使用的客戶端,但是它歸結爲思考如何在模式的「操作」「鍵」值中可靠地構建字符串模式以找到所需內容,如下所示」,其中$表示給定的字符串的variabe組件:

get locality:$id = name 
list locality:dwellings = [dwelling:id, dwelling:id ...] 
map-get dwelling:id 'typical_value' = 'rank: $rank\tvalue: $value' 

我使用PHP直接與Redis的互動,並通過jQuery $。員額異步交互客戶端調用服務器端接口,路線命令到redis訪問器類。界面非常簡單。這裏是jQuery方面。

/*QUERY 
*functional programming puts a big emphasis on "wrapping" repetitive tasks inside 
*another function. This one amounts to the same thing as a protocol in 
*Clojure, with the query map acting as the dispatch value that triggers 
*the right method on the server side, recieves and parses the response, 
*and then passes it on to the "body" of the client logic expressed in callback, 
*which causes side effects on the screen. 
*/ 
redgets.query = function(query_map, callback) { 
    $.post(redgets.router, query_map, function(data) { 
    return callback($.parseJSON(data)); 
    }); 
}; 

和示例query_map如下所示:

$response = array(); 
switch ($_POST['method']) { 
case 'locality_by_id': 
    if ($_POST['localityID']) { 
     $response = $this->locality_by_id($_POST['localityID']); 
     break; 
//etc, until 
return json_encode($response); 
} 

其中$這個 - > locality_by_id()是:

{method: 'locality_by_id', localityID: 'locality:1'} 

其中例如PHP的路由器可以與解讀您通過predis客戶端界面編寫的用於觸摸redis的查詢。

Redis使得隨機訪問XML文件的速度更快,並且更容易纏繞頭部,一旦您將頭部纏繞在平面地圖上的樹形數據結構外面。這意味着,您必須編寫一個解析器,將DOM項目轉換爲適合redis友好的鍵值對。我相信你會對如何最好地做到這一點有一些想法。一旦你寫了一個轉換器,反過來也很容易。

(我會添加更多的鏈接,但垃圾郵件控制sez否)

相關問題