Schema中命名空間對一致性約束的影響

2021-09-13 15:34:45 字數 1236 閱讀 2135

schema中有3種一致性約束:key約束、keyref約束和unique約束,這3種約束對命名空間的支援有點小問題,假設有如下schema:

<?xml version="1.0" encoding="utf-8"?>

上面的schema是在元素(根元素)之內定義了唯一約束,定義test/item之下的元素的值必須遵守唯一約束。對於如下xml文件:

<?xml version="1.0" encoding="utf-8"?>

1dell

1sony

上面的xml文件中兩個元素裡的子元素的值完全相同,這顯然不符合唯一約束的要求,但這份xml文件依然是有效的。這是為什麼呢?

發生這個問題是因為一致性約束對命名空間的支援有點小問題,上面的key.xsd定義一致性約束時在①、②號**處直接使用了item、id兩個元素,而沒有任何字首。本質上它們依然處於命名...,只是由於指定了xmlns="",因此在key.xsd中使用時無須新增限定短名作為字首。但一致性約束不這麼處理,它的處理規律是:只要該元素沒有新增任何限定短名,它就認為該元素不處在任何命名空間下。也就是說,它約束的並不是命名...,而是對不在任何命名空間下的id進行約束,因此上面的key.xml文件自然也就有效了。

為了解決這個問題,當需要在schema中對指定命名空間下的元素新增一致性約束時,必須為其新增限定短名作為字首。可以把key.xsd該為如下形式:

<?xml version="1.0" encoding="utf-8"?>

上面的updated_key.xsd中為item、id元素定義約束時指定了sos字首,於是一致性約束就會根據該字首找到對應的命名空間,完成對

命名...。如果上面的key.xml改為使用updated_key.xsd這份schema作為語義約束,那它就違反了唯一約束,自然也就是無效文件了。

總結:當需要在schema中對指定命名空間下的元素(或屬性)新增像key、keyref或unique約束時,必須為其新增限定短名作為字首,否則一致性約束會認為只是對無命名空間的元素(或屬性)新增約束。

參考:

瘋狂xml講義

xml高階程式設計

強一致性 弱一致性 最終一致性

這種方式在es等分布式系統中也有體現,可以設定主shard提交即返回成功,或者需要replica shard提交成功再返回。提到分布式架構就一定繞不開 一致性 問題,而 一致性 其實又包含了資料一致性和事務一致性兩種情況,本文主要討論資料一致性 事務一致性指acid 複製是導致出現資料一致性問題的唯...

一致性分析 壓力均勻性對軟包電池模組一致性影響分析

doi 10.14175 j.issn.1002 4581.2020.01.008 0 引 言 軟包電芯外部只有鋁塑膜封裝,沒有剛性殼體防護,電芯內部極片 隔膜的多孔狀態及介面結構,容易受到外部壓力影響電化學狀態,因此模組成組工藝過程中的約束壓力對軟包電芯效能影響較為顯著。瑞典皇家學院 現代汽車的相...

一致性雜湊

直接貼出一篇介紹的很清楚的博文。關鍵字一致性雜湊 平衡性,單調性,分散性,負載 其實說白了,就是解決把請求分散到不同的機器上運算,怎麼做分散的平均,機器少一台多一台,或者壞掉一台,成很好的自適應和拓展。最簡單的實現分布式演算法,取模嘛,但是它就上述的一些問題,所以不算好的雜湊函式。一致性雜湊演算法,...