簡體   English   中英

oracle XML DB無法驗證 <xs:pattern> 與RegEx一起在其他工具中進行驗證

[英]oracle XML DB fails to validate <xs:pattern> with RegEx that validates in other tools

我用正則表達式模式創建了這種簡單類型。

<xs:simpleType name="dotString">
    <xs:restriction base="xs:string">
        <xs:pattern value="dot\s\b([1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-3][0-9][0-9][0-9]|40[0-8][0-9]|409[0-8])\b">
    </xs:pattern>
    </xs:restriction>    
</xs:simpleType>

它僅需要接受字符串“點[1到4098]”數字。 這種正則表達式模式在名為Kiki(0.5.6)的工具以及其他在線網頁中非常符合我的要求。 ...但是當我將其放入XSD並嘗試將其用於XML時,驗證失敗並顯示錯誤:“無法解析架構”。

根據我的測試,它與正則表達式中的“ \\ b”有關。 如果我從XSD中刪除“ \\ b”,則XML驗證運行正常,不會出現任何錯誤,但結果不是預期的。 它無法正確驗證...。類似這樣的消息通過:“ dot 5000”

oracle xml db中不支持“ \\ b”嗎? 我應該使用“ \\ b”代替什么?

不, \\b單詞邊界 )不是Oracle支持的受Perl影響的擴展之一。

如果應該使用整個字符串,則可以使用\\W非單詞類:

^\W*dot\s([1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-3][0-9][0-9][0-9]|40[0-8][0-9]|409[0-8])\W*$

具有一些演示值:

with t as (
  select 'dot 1' as val from dual
  union all select 'dot 1 ' as val from dual
  union all select ' dot 1' as val from dual
  union all select ' dot 1 ' as val from dual
  union all select 'dot 4098' as val from dual
  union all select 'dot 4098 ' as val from dual
  union all select ' dot 4098' as val from dual
  union all select ' dot 4098 ' as val from dual
  union all select 'dot 4099' as val from dual
  union all select 'dot 5000' as val from dual
  union all select 'dot 1211' as val from dual
  union all select ' dot 1211 ' as val from dual
  union all select 'x dot 1211 ' as val from dual
  union all select ' dot 1211 x' as val from dual
)
select '<' || val || '>' as val,
  case when regexp_like(val,
    '^\W*dot\s([1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-3][0-9][0-9][0-9]|40[0-8][0-9]|409[0-8])\W*$'
    ) then 'Yes' else 'No' end as matches
from t;

該模式得到:

VAL           MATCHES
------------- -------
<dot 1>       Yes    
<dot 1 >      Yes    
< dot 1>      Yes    
< dot 1 >     Yes    
<dot 4098>    Yes    
<dot 4098 >   Yes    
< dot 4098>   Yes    
< dot 4098 >  Yes    
<dot 4099>    No     
<dot 5000>    No     
<dot 1211>    Yes    
< dot 1211 >  Yes    
<x dot 1211 > No     
< dot 1211 x> No     

我不確定這是否滿足您的所有要求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM