:::

DSpace新增input-type——XMLMetadata篇

10月 18, 2008 , 0 Comments Edit Copy Download

DSpace新增input-type目錄

  1. 安裝篇
  2. TextEditor篇
  3. FileUpload篇
  4. XMLMetadata篇

雖然以XML取名,但其實這是我自己設定的格式,以div搭配class屬性來儲存資料,而不是真的XML。

概念上是樹狀結構的儲存模式,長得如下圖:

image

節點Node用來包含節點或輸入表單Input,輸入表單Input則是用來輸入值用的。他們各自的屬性如下表:

Node 節點
  • div.node-type:node [必填|不可重複]
    節點的類型,如果你要宣告一個是node,請在此輸入「node」。是input的話就輸入「input」。
  • div.node-id [選填|不可重複]
    當此節點顯示成表格(不論是可編輯的表單或顯示用的表格),該表格的id會設定這個值。可用來做為調整的依據。
  • div.node-class [選填|不可重複]
    當此節點顯示成表格(不論是可編輯的表單或顯示用的表格),該表格的class會設定這個值。可用來做為調整的依據。
  • div.node-title [必填|不可重複]
    標題,可空白,但如果不填的話可能會出錯。
  • div.node-repeatable:true | false* [選填|不可重複]
    可否重複,值有「true」跟「false」,預設是false。
  • div.node-content-temp:子節點 [選填|不可重複]
    這是預設子節點的內容,當可重複時,新增的重複資料會取用此預設子節點的內容。當node-content-temp不存在時,程式會自動抓取node-contents最後一個來作為node-content-temp。
  • div.node-contents:子節點 [選填|可重複]
    要儲存並顯示的子節點內容,可重複代表著可以設定很多相同或不同的子節點內容。當node-contents不存在時,程式會自動抓取node-content-temp來作為node-contents。

node的舉例如下:(紅色部份表示是值)

<div class="node">
  <div class="node-type">node</div>
  <div class="node-title">教師</div>
  <div class="node-repeatable">true</div>
  <div class="node-content-temp">
    <div class="node">
      ……
    </div>
    <div class="node">
      ……
    </div>

  </div>
  <div class="node-contents">
    <div class="node">
      ……
    </div>
    <div class="node">
      ……
    </div>
  </div>
  <div class="node-contents">
    <div class="node">
      ……
    </div>
    <div class="node">
      ……
    </div>
  </div>
  <div class="node-contents">
    <div class="node">
      ……
    </div>
    <div class="node">
      ……
    </div>

  </div>
</div>
input 輸入表單
  • div.node-type:input [必填|不可重複]
    節點的類型,如果你要宣告一個是input,請在此輸入「input」。是node的話就輸入「node」。
  • div.node-id [選填|不可重複]
    當此節點顯示成表格(不論是可編輯的表單或顯示用的表格),該表格的id會設定這個值。可用來做為調整的依據。
  • div.node-class [選填|不可重複]
    當此節點顯示成表格(不論是可編輯的表單或顯示用的表格),該表格的class會設定這個值。可用來做為調整的依據。
  • div.node-title [必填|不可重複]
    標題,可空白,但這樣可能會有錯誤。
  • div.node-repeatable:true | false* [選填|不可重複]
    可否重複,值有「true」跟「false」,預設是false。
  • div.input-required:true | false* [選填|不可重複]
    當表單內沒有值的時候,會提示使用者要填寫,但目前仍無法阻止使用者在沒有在表單輸入值的時候遞交表單。值有「true」跟「false」,預設是false。
  • div.input-type:onebox | date | textarea* | texteditor | fileupload | dropdown | list [選填|不可重複]
    表單的類型,目前只有七種,也跟DSpace的輸入類型一樣。如果設定為dropddown或list的話,則必須填寫下面的input-options。
  • select.input-options:<option value="VALUE">TITLE</option> [選填|不可重複]
    下拉式選單的選項,內容值要填入跟<select>內容一樣的<option>標籤。如果在input-options裡面如果沒有以defalut-value、values為值的<option>標籤,那程式會自動新增。
  • div.intput-default-value [選填|不可重複]
    預設值,在重複的時候會自動帶入此值,可以輸入空白。當default-value沒有資料的時候,會自動取用最後一個values的值作為default-value。
  • div.intput-values [選填|可重複]
    要儲存的值。當values沒有資料的時候,會自動取用default-value的值作為values。

input範例:(紅色部份表示值)

<div class="node">
  <div class="node-type">input</div>
  <div class="node-title">作品語言</div>
  <div class="node-repeatable">true</div>
  <div class="input-required">true</div>
  <div class="input-type">dropdown</div>
  <select class="input-options">
    <option value="zh_TW">中文</option>
    <option value="en">English</option>
    <option value="jp">日本語</option>
  </select>
  <div class="input-default-value">zh_TW</div>
  <div class="input-values">zh_TW</div>
  <div class="input-values">jp</div>
</div>

範例與即時適用

&<div class="xml-root" id="xmlRootExample" style="display:none">
  <div class="node">
  <div class="node-type">node</div>
  <div class="node-title">秋番動畫</div>
  <div class="node-repeatable">true</div>
  <div class="node-content-temp">
    <div class="node">
      <div class="node-type">input</div>
      <div class="node-title">作品題名</div>
      <div class="node-repeatable">true</div>
      <div class="input-required">true</div>
      <div class="input-type">onebox</div>
      <div class="input-default-value"></div>
    </div>
    <div class="node">
      <div class="node-type">input</div>
      <div class="node-title">作品語言</div>
      <div class="node-repeatable">false</div>
      <div class="input-required">true</div>
      <div class="input-type">dropdown</div>
      <select class="input-options">
        <option value="zh_TW">中文</option>
        <option value="en">English</option>
        <option value="jp">日本語</option>
      </select>
      <div class="input-default-value">zh_TW</div>
    </div>  
  </div>
  <div class="node-contents">
    <div class="node">
      <div class="node-type">input</div>
      <div class="node-title">作品題名</div>
      <div class="node-repeatable">true</div>
      <div class="input-required">true</div>
      <div class="input-type">texteditor</div>
      <div class="input-default-value"></div>
      <div class="input-values">神薙</div>
      <div class="input-values">kaminagi</div>
    </div>
    <div class="node">
      <div class="node-type">input</div>
      <div class="node-title">作品語言</div>
      <div class="node-repeatable">false</div>
      <div class="input-required">true</div>
      <div class="input-type">list</div>
      <select class="input-options">
        <option value="zh_TW">中文</option>
        <option value="en">English</option>
        <option value="jp">日本語</option>
      </select>
      <div class="input-default-value">zh_TW</div>
      <div class="input-values">jp</div>
    </div>
  </div>
</div>

※fileupload要搭配DSpace才能使用,FCKeditor找不到空間上傳暫時,因此texteditor也不能用,請多見諒


輸出到<default-value>

如果想知道怎麼運作的,可以直接看看原始碼喔。


在input-forms.xml設定xmlmetadata

跟一般的field不同的是,xmlmetadata會需要輸入<default-value>。要注意的是,<default-value>裡面的資料不允許斷行,可以利用上面的輸出成<default-value>程式過濾器來輸入。

把上面的範例輸入進去之後,<field>的程式碼會像是這個樣子:

修改完畢之後重新啟動Tomcat就可以了。


未完成的部份

  • 驗證階段也要顯示xmlmetadata。

可以參考display-item.jsp的修改去做,加油吧。