2009-08-11 39 views
1

我正在嘗試創建一個XML模式來描述醫院的某些方面。醫院可能有24小時的覆蓋範圍:緊急服務,手術室,藥劑師等。整個清單相對較短 - 約爲10.覆蓋範圍可能超過其中一項。可選或布爾元素用於指定XML模式中的特徵?

我的問題是如何最好地表達這一點。我正在考慮沿線:

<coverage> 
    <emergencyServices/> 
    <operatingRoom/> 
</coverage> 

基本上,這些服務是可選的,如果它們存在,覆蓋面是由醫院提供。

或者,我可以有:

<coverage> 
    <emergencyServices>true</emergencyServices> 
    <operatingRoom>true</operatingRoom> 
    <pharmacist>false</pharmacist> 
</coverage> 

在這種情況下,我需要的所有元素,但值false意味着覆蓋面不提供。

可能還有其他方法。

什麼是這樣的最佳做法?而且,如果我使用第一個選項,那麼元素應該在模式中是什麼類型?

回答

3

這裏的最佳實踐取決於消費者。

短且簡單的規則是,標記爲結構,和內容是用於數據。所以讓他們包含xs:boolean值一般是最好的過程。現在

,到選項:

  1. 具有單獨的類型化元素是簡單明瞭;有時處理系統可能難以讀取它們,因爲一些XML關係映射器可能看不到要放入關係表的元素中的任何數據。但是如果他們有值,比如<emergencyServices>true</emergencyServices>,那麼關係表就會有一個值。再次,如果您有固定的元素名稱,這意味着如果您的客戶正在使用將XML映射到數據庫的系統,則每次添加服務時都必須進行架構更改。

    還有其他幾種方法;每個都有折衷:

  2. 使用<xs:string>enumeration,並允許多個副本。那麼你可以有<coverage>emergencyServices</coverage><coverage>operatingRoom</coverage>.這使得添加到列表更簡單,但允許重複。該方案不需要消費者在數據庫中進行模式更改。

  3. 您可以使用<coverage>元素上的屬性。他們將有一個xs:boolean類型,但仍需要模式更改。當然,這引起了attribute vs. element的爭論。

一個很好的資源是Effective XMLChapter 11。在做出最終決定之前,至少應該閱讀這些內容。

相關問題