2009-04-13 43 views
0

假設我有一個系統爲xml中的一些複雜對象存儲數據。這些對象的繼承關係很弱:可能有4個字段對所有對象都是通用的,而對於每種類型的對象都有其他20個字段,比如6到8種不同類型的對象。基於xml架構創建頁面並添加來自xml記錄的數據

對每個對象來說唯一的數據本身可能很複雜:像枚舉,其他複雜類型以及僅僅有條件使用的項目。每種類型的對象都有一個xml模式來描述它。

該系統通過一系列步驟爲每個對象建立記錄,因此只有部分記錄是很常見的。沒有定義每個步驟所涉及的內容:用戶可以儘可能多地填寫內容,然後將其傳遞給更有知識的人來完成。

我想要做的是創建一個ASP.Net頁面來顯示這些記錄。給定一個記錄號(和類型)將該類型的模式加載到表單中,然後從記錄本身填充表單。我認爲記錄本身不足以創建頁面,因爲記錄可能還沒有列出我想要包含在表單中的每個字段,並且不會隱式地包含像枚舉類型的數據。

什麼將是一個優雅的方式來實現這一目標?我確信我錯過了一些簡單的方法來實現這一點,但Xslt可能不會削減它。

這是一個跟進到this question,目前純粹是假設。根據這裏的回答,我可能會完全不同。

+0

你爲什麼說「XSLT可能不會削減它」? XSLT是將XML數據和XML模式元數據轉換爲HTML的完美工具。 – 2009-04-15 18:58:08

+0

好,很好,不完美。有一點被帶走了。 – 2009-04-15 18:58:40

回答

1

當你說「Xslt可能不會削減它」,我想知道你想到哪種Xslt方法。

一種方法是以某種方式轉換表單的實例數據。 (我不確定這是如何在實踐中起作用的,也許這就是爲什麼你說Xslt不起作用。)

另一種方法是使用Xslt生成一個定製的一次性模式,表單數據的當前狀態。然後,您將使用此模式來構建表單。例如,轉換後的模式將排除尚未準備好顯示的字段的定義。這聽起來對我來說(十分可行的不是我自願:-)

UPDATE(迴應評論): 說實話,我不知道asp.net不夠好,也就是說,當它的緩存會適合您的需求。我原以爲你不要想要緩存,因爲我會得到的原因。

試圖澄清我的意思:我在您的描述中聽到的是,記錄的當前狀態可能會影響表格的結構。例如,字段A的合法值可能受到字段X,Y和Z值的限制,其中某些字段在給定時間可能實際上是未知且不可知的;這種模糊性可能使得使用單一統一結構來呈現表格變得困難。

我的想法是,也許你不必將自己侷限於不可變的模式。如果數據的當前狀態可以更好地由修改後的模式來表示(例如,反映字段A的允許枚舉值的字段,或者字段B當前允許的聯合選項),那麼我建議可能轉換模式在創建表單之前可能會有訣竅。對於關於緩存的評論,我擔心緩存可能會導致在需要更新的表單時出現過時的表單定義,這是由於數據和模式的更改。也許你可以通過根據自定義模式的當前狀態來排列名稱空間URL來避免這種情況。

我希望這會有所幫助。