2009-11-06 21 views
5

我需要構建一個用戶界面來編輯和創建符合給定xsd架構的xml文檔。我想要做的是儘可能根據該xsd模式生成我的用戶界面。 xsd模式可以(也將會)隨着時間的推移而改變,所以解決方案需要有些靈活。從Xsd構建用戶界面的工具包或應用程序

用戶界面需要是一個Web UI,理想情況下,它是使用ASP.NET MVC構建的。

我懷疑這是一個很高的順序,而不是一個可以通過工具包或庫完全解決的問題,但我很想知道是否有其他人已經走上了這條道路並取得了成功(或失敗),以及他們是否使用特定的庫,工具包或方法。我已經開始將T4模板視爲一種方法,並且認爲這會讓我獲得很多方法,但如果有更簡單的方法,則不希望對此做出承諾。

+1

我選擇了neonski的答案,因爲它最貼近我猜想我最終會做的事情。斯瓦蒂 - 如果我能分裂你和我之間的恩恩斯基之間的恩賜。我已經爲你的答案+1了。感謝大家。 – 2009-11-13 13:49:56

回答

4

我已經構建了一個引擎,它與您所描述的內容非常相似,但不是使用XSD,而是在JSON Schema中定義架構,並使用Ext JS框架在瀏覽器中呈現界面。

這是一個非常強烈的JavaScript,但在開發和維護期間節省的時間方面,我們的收益已經非常巨大。

我不知道是否有一種工具可以完全滿足您的需求,但最簡單的方法是找到一個靈活的,可靠的GUI框架(如Ext JS,YUI,Dojo等)並映射每種類型在您的XSD中在GUI框架中添加一個「窗口小部件類型」。您將不得不基本保留每種類型的「預配置」,並在解析XSD時應用它們。在概念層面上,它其實很簡單。

由於其動態性,JavaScript成爲這種任務的絕妙語言。

+0

我認爲你是正確的將XSD類型映射到類/代碼/小部件。 – 2009-11-13 13:39:41

0

將XSD架構轉換爲XAML可能會很有趣,該XAML可以在您的網頁上實例化爲Silverlight表單。

不是說這種方法一定會比T4好;我從來沒有嘗試過。

+0

謝謝扎克。我懷疑T4模板在東西不是完全映射1:1的情況下會給我更多的靈活性。 – 2009-11-06 11:52:55

+0

讓我們來看看還有多少人可以用Zac來回答這個問題 – 2009-11-11 08:58:33

+0

去找吧Zac(s)! – 2009-11-12 12:19:13

1

您可能想看看StyleVision,我曾與之合作過這個目的。我知道它們的截圖看起來很嘈雜,但我認爲它們只是試圖讓它看起來令人印象深刻。在我看來,值得檢查一下。

2

你的意思是類似this?這是我在我的一個項目中使用的方法,通過xsd將xml轉換爲xhtml。我的項目非常靈活。

+0

這看起來很不錯。 – 2009-11-12 12:21:33

1

嘗試JAXE。它是一個XML編輯器,它根據您提供的XML架構向您介紹在給定元素內插入哪些元素的上下文選擇。它不是一個Web界面,而是一個Java界面,如果您願意,它可能會嵌入到Java小程序中。 (對於界面的外觀,它也沒有給你足夠的靈活性,但它確實給了你很大的靈活性,以確定模式的外觀。)它看起來與Altova的StyleVision類似,後者在這裏提出了另一個答案,但JAXE是開源的。

0

我一直在使用XSD,Microsoft XmlSampleGenerator項目來從Xsd生成示例xml,然後用它來構建GUI和Schematron(用於在Xsd中定義規則和驗證)來進行驗證。一對夫婦的注意事項:

  • 實現是非常微軟特有的:一個Silverlight前端UI從XML生成,對一個XSD通過Schematron的擴展驗證(NMatrix Schematron.NET開源實現),包括業務規則。
  • 您可以直接從Xsd生成GUI,而無需XmlSampleGenerator步驟,我將它包含在POC中,因爲它在生成UI時簡化了xml解析並消除了噪音。

我在XML元素定義的字段類型在XSD屬性其中當經由WCF通過網絡發送到Silverlight可以被用於當定位經由DataTemplate中查找一個合適的編輯器給定類型在編輯模式下,例如如果類型是System.DateTime等,則顯示DatePicker。如果類型更復雜,則可以定義自己的類型,這些類型映射到用於複雜UI編輯場景的UI小部件。我也有格式掩碼作爲屬性在xml上顯示各種類型的格式。

我還研究了從XML到分層對象的直接映射,例如,一個包含'Name','Value'和'ChildNodes'屬性的Node類,它們被封裝爲IEnumerable時,可以綁定到第三方控件,如Infragistics XamGrid and XamDataTree,這兩個控件都是完全可編輯的。再一次,通過所有層的MS實現。

希望有所幫助。

相關問題