命名空間和控制器是什麼關聯 命名空間和版本控制

2021-10-07 19:50:21 字數 2615 閱讀 3191

命名空間和控制器是什麼關聯

xml的核心功能之一是它具有處理資料規則變化的能力(因此,其名稱具有可擴充套件性 -可擴充套件標記語言)。 隨著對xml詞彙表的更改,不可避免地要建立多個版本。 這使得有必要清楚地標記版本,以獲取人和機器資訊。 版本的清晰標記可用於驅動驗證,或根據每個版本的要求進行分支處理。

您可以通過多種方式標記xml詞彙表的版本。 本討論著重於使用xml命名空間標記版本。

讓我們從郵件標籤格式的xml詞彙開始:

清單1.郵件標籤格式

<?xml version="1.0"?>

thomas eliot

3 prufrock lane

stamford

ct

如果我認為這種格式可能會更改,那麼在我第一次部署它時就應該標記它的版本。 一種實現方法是通過文件型別宣告(dtd)。 dtd引用了乙個公共識別符號,可以使其特定於文件版本。 乙個很好的例子是w3c的xhtml公共識別符號,用於以下宣告中:

您不僅可以看到版本(1.0),還可以看到版本內的變體(xhtml具有三種變體:嚴格,過渡和框架集)。

自然,各種版本的dtd本身都會反映所做的更改。 這種方法要求我在dtd中定義格式,但這可能並不總是需要的。 同樣,儘管dom和sax提供了對源宣告中使用的公共識別符號的訪問,但xslt卻沒有。

經常使用的另一種方法是頂層版本屬性。 例如:

清單2.具有版本屬性的郵件標籤格式

<?xml version="1.0"?>

thomas eliot

3 prufrock lane

stamford

ct

無論我是否使用xml模式系統,頂級版本屬性均有效。 並且可以從dom,sax,xslt或任何其他常規xml處理技術中獲得版本資訊。

版本屬性方法由xslt語言本身採用。 這種方法的最大問題主要是概念上的:版本識別符號和每個xml資訊項之間的連線有些微弱(通常是通過祖先的屬性,可能是遙遠的屬性)。 這還會導致根據版本排程的**有些尷尬。

為了使版本資訊成為xml資訊項的更直接屬性,可以將它們放在反映版本的xml命名空間中。 例如:

清單3.具有命名空間版本的郵件標籤格式

<?xml version="1.0"?>

thomas eliot

3 prufrock lane

stamford

ct

因此,版本資訊隨命名空間一起傳遞-在每個sax事件,每個dom節點或每個xpath節點的命名空間軸上。 大多數w3c詞彙表都使用此通用系統。 實際上,xslt除版本屬性外還使用它。

確切地說,w3c通常在命名空間uri中使用日期戳,而不是版本號。 我可以用以下內容來模擬:

清單4.具有日期標記的命名空間版本的郵件標籤格式

<?xml version="1.0"?>

thomas eliot

3 prufrock lane

stamford

ct

如清單4所示,當您使用命名空間進行版本控制時,最大的問題是,由於命名空間的傳播,實際格式中即使是很小的更改也會成為乙個大問題。 如果我調整格式以允許位址中包含可選的country元素,則使用者最終將在所有處理過程中都支援原始命名空間以及更新後的命名空間(例如)**,即使它可能對處理**沒有太大的實際影響。

如果版本中格式的更改很小,以至於不會對處理造成太大影響,則一種解決方案是不要在格式上的每一次更改都更改命名空間uri。 該解決方案在大多數情況下都有效,但是當命名空間的維護者使用可檢索的uri指向描述該格式的實際文件時,該解決方案就會失效。 在這種情況下,文件可能會隨格式的變化而變化,無論其大小如何。 因此,更改該文件的uri(也恰好是命名空間)是有意義的。

埃里克·范德vlist提出了乙個系統,在2023年3月的xml-dev郵件列表上減少這一問題(參見相關主題 )。

在這種情況下,版本號根據所表示格式更改的大小分為主要部分和次要部分。 命名空間中僅使用版本號的主要部分。 例如,我的郵件標籤格式的原始版本是1.0(主要1,次要0)。 新增可選的國家/地區元素後,新版本為1.1(主要1,次要1)。 我在兩種情況下都使用的命名空間是:

然後,我設定http伺服器(該伺服器提供每個命名空間uri指向的文件),以將使用者從僅具有主要版本號的url重定向到提供精確版本的url。 因此,當伺服器收到對的請求時,它將重定向到位於.1的文件,因為最新版本。 使用者仍然可以通過對該uri進行顯式請求來自由檢索1.0文件。

通過假定常規做法,本技巧可以掩蓋幾個有爭議的觀點。 使用命名空間標記版本比使用版本屬性標記版本更為普遍,儘管哪種方法更好尚有爭議。 同樣,關於命名空間uri是否應該指向任何內容(由資源目錄描述語言(rddl)定義)直接指向定義格式的文件或有關詞彙的常規資訊文件,也存在爭議。 同樣,通常的做法是將http url用於命名空間。 考慮到本次討論中所**的精妙之處,在實踐中將版本放置在命名空間中已得到充分證明,並且使處理xml格式的更改變得有些麻煩。

翻譯自:

命名空間和控制器是什麼關聯

C 命名空間是什麼?命名空間的概念及使用!

舉個例子 有乙個學校,世界之大無奇不有,恰恰這個學校就比較奇怪。那你可能就會問了,這個學校究竟奇怪在 這個學校奇怪的就是不僅有很多生日相同的學生,還有不少同學重名重姓。然後有一天放學,學校裡有人撿到了乙個錢包,裡面有張三的學生證,這個錢包就被送到了校長手裡,校長看著學生這麼懂事,對其大加讚賞,於是便...

thinkphp的模組與控制器命名規則

1 模組名即為要操作的資料表名,例如blogmodel.class.php 中加入如下 後 class blogmodel extends model 即代表鏈結上了 think blog 這資料張表。2 控制器方法名即為模板名,例如showaction.class.php 中加入如下 後 clas...

在包含單個域控制器的域中重新命名域控制器

1.在域中安裝 windows server 2003 成員伺服器。2.在新伺服器上,通過安裝 active directory 建立另外乙個域控制器。3.安裝 active directory 之後,在新的域控制器上啟用全域性編錄。4.將操作主機角色從您要重新命名的域控制器轉移到新的域控制器。注意...