2012-11-28 52 views
3

我想要使用隨機xml生成器工具,以通過從xsd生成隨機xml文件來執行隨機測試。 (我正在使用氧氣工具)如何生成語義上有效的隨機XML文件?

隨機生成器不會對生成的值應用語義限制。例如我有一個元素「參數」,它具有多個元素「參數」,例如p1和p2,另一方面,我有另一個元素「約束」,它將使用「參數」。我的意思是如果我有P1,P2,它應該使用p1和p2的一個子集。我想強制隨機生成器工具使用它們(p1和p2),而不是爲約束再次隨機生成一些其他參數。我用「鑰匙」,「鑰匙參考」和..但它仍然無法正常工作。 它只是生成隨機字符串,沒有任何限制,我不得不提及的是,我選擇「元素和屬性的值:隨機(應用限制)」選項。因此,它應該考慮生成隨機值時的限制,但它不會!請幫助..一個有效的XML

示例:

<system> 
     <parameters> 
      <parameter id="1" name="p1" > 
        <value id="1" name="value1"/> 
        <value id="2" name="value2"/> 
       </parameter> 
       <parameter id="2" name="p2" > 
        <value id="1" name="value1"/> 
        <value id="2" name="value2"/> 
       </parameter> 
      </parameters> 
      <constraint text="p1=p2"> 
       <parameter name="p1"/> 
       <parameter name="p2"/> 
      </constraint> 
     </system> 

所以我想的已經生成的參數(p1和p2)使用的子集,你可以看到在上面的例子,而不是產生一些其他隨機參數,因爲然後所有生成的xml都是無效的,我想要一個有效的。一個無效的XML

示例:

<system> 
     <parameters> 
      <parameter id="1" name="p1" > 
        <value id="1" name="value1"/> 
        <value id="2" name="value2"/> 
       </parameter> 
       <parameter id="2" name="p2" > 
        <value id="1" name="value1"/> 
        <value id="2" name="value2"/> 
       </parameter> 
      </parameters> 
      <constraint text="**p3**=**p5**"> 
       <parameter name="**p8**"/> 
       <parameter name="**p9**"/> 
      </constraint> 
     </system> 

感謝

+1

您是否要求提供一些預先存在的工具?或者寫出要求某人寫一個? – user17753

+0

我要測試的工具是預先存在的。隨機生成器也可用(OXYGEN),但我不知道如何生成有效的XML,正如我上面所解釋的,隨機生成器將生成XML文件,它們的語法是正確的,但它們的語義不是!我不知道上面的例子是否清楚? – user1860496

回答

0

一般情況下,檢查身份的限制,使文檔生成的任務要複雜得多。 (我相信我曾經看到一個說法,認爲它使NP完整,但我可能誤解了)。所以我懷疑你會很幸運地告訴Oxygen的示例文檔生成器遵守你的想法;大多數發電機滿足於生產數據滿足內容模型。

你可能會有更好的運氣,寫一個過濾器來區分符合你想要的約束的例子的例子(這樣你就可以生成100個例子並運行過濾器來查找那些可用於你的例子目的),或者轉變爲採取任意的例子,並改變它來滿足你的約束。