不允许特定字符串的 XML 架构限制模式

2023-12-29

我需要编写一个对字段进行限制的 XSD 架构,以确保 该字段的值在任何位置都不包含子字符串 FILENAME。

例如,以下所有内容都必须无效:

FILENAME
ORIGINFILENAME
FILENAMETEST
123FILENAME456

这些值都不应该有效。

在支持负向前瞻的正则表达式语言中,我可以通过编写来做到这一点/^((?!FILENAME).)*$但 XSD 模式语言不支持负向前瞻。

如何实现 XSD 模式限制,其效果与/^((?!FILENAME).)*$ ?

我需要使用模式,因为我无法访问 XSD 1.1 断言,这是另一种明显的可能性。

问题XSD 限制否定匹配字符串 https://stackoverflow.com/questions/9889206/xsd-restriction-that-negates-a-matching-string涵盖了类似的情况,但在这种情况下,禁止的字符串仅作为前缀被禁止,这使得检查约束变得更容易。如何扩展该解决方案以涵盖我们必须检查输入字符串中的所有位置而不仅仅是开头的情况?


好的,OP 说服了我,虽然提到的另一个问题 https://stackoverflow.com/questions/9889206/xsd-restriction-that-negates-a-matching-string有一个重叠的主题,事实上,禁止字符串在所有位置都被禁止,而不仅仅是作为前缀,这使得事情变得复杂到需要单独的答案,至少对于 XSD 1.0 的情况是这样。 (我开始将此答案添加为我对另一个问题的答案的附录,并且它变得太大了。)

这里可以使用两种方法。

First, 在 XSD 1.1 中,形式的简单断言

not(matches($v, 'FILENAME'))

应该做这项工作。

第二,如果一个人被迫与一个人一起工作XSD 1.0处理器,需要一种模式来匹配所有且仅不包含禁止子字符串(此处为“FILENAME”)的字符串。

实现此目的的一种方法是确保字符“F”永远不会出现在输入中。这太激烈了,但它确实完成了这项工作:不包含禁止字符串第一个字符的字符串不包含禁止字符串。

但是包含“F”的字符串又如何呢?只要字符串“ILENAME”后面没有“F”,它们就可以。

更抽象地讲最后一点,我们可以说任何可接受的字符串(任何不包含字符串“FILENAME”的字符串)都可以分为两部分:

  1. 不包含字符“F”的前缀
  2. 出现零次或多次“F”,后跟与“ILENAME”不匹配且不包含任何“F”的字符串。

前缀很容易匹配:[^F]*.

以 F 开头但不匹配 'FILENAME' 的字符串稍微复杂一些;正如我们不想禁止所有出现的“F”一样,我们也不想禁止“FI”、“FIL”等——但是每次出现这样的危险字符串后都必须跟随字符串的末尾,或者与禁止字符串的下一个字母不匹配的字母,或者另一个开始我们需要测试的另一个区域的“F”。因此,对于禁止字符串的每个正确前缀,我们创建一个以下形式的正则表达式

$prefix || '([^F' || next-character-in-forbidden-string || ']' 
    || '[^F]*'

然后我们用 or-bar 连接所有这些正则表达式。

在这种情况下,最终结果如下所示(我在这里和那里插入了换行符,以使其更易于阅读;在使用之前,需要将它们撤回):

[^F]*
((F([^FI][^F]*)?)
|(FI([^FL][^F]*)?)
|(FIL([^FE][^F]*)?)
|(FILE([^FN][^F]*)?)
|(FILEN([^FA][^F]*)?)
|(FILENA([^FM][^F]*)?)
|(FILENAM([^FE][^F]*)?))*

需要牢记两点:

  • XSD 正则表达式是隐式锚定的;使用非锚定正则表达式评估器对此进行测试将不会产生正确的结果。
  • 起初可能并不明显为什么选择中的替代方案都以[^F]*代替.*。考虑字符串“FEEFI FILENAME”可能会有所帮助。我们必须检查every出现“F”以确保其后面没有“ILENAME”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不允许特定字符串的 XML 架构限制模式 的相关文章

随机推荐

  • 使用 Jquery 进行多个过滤器

    我的页面中有一些 div 使用 php jquery 构建 我想根据它们的属性过滤它们 如果有超过 1 个属性过滤 则会缩小搜索范围 div 看起来像这样 div div title Mike Whatever content 1 div
  • 将 WWW 重定向到非 WWW,或者反之亦然? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我刚刚在我的网站上进行了搜索引擎优化
  • 使用 Google Sheets API,当我输入数据时,不支持添加和更新列格式

    所以 这实际上是一个基于我上次尝试的后续问题 如何使用 API 将列添加到 Google Sheets 并在同一调用中提供列的名称和类型 https stackoverflow com questions 57259399 how to a
  • 高效的java对象图序列化

    序列化 java 对象图的最佳方法是什么 我对序列化库的要求是 1 反序列化速度 2 size 尽可能小 小于java默认序列化中的大小 3 灵活性 基于注释的定义必须序列化的内容会很好 底层文件格式并不重要 我查看了Protocol Bu
  • 具有统一初始化的 Auto 扩展为意外类型

    考虑这个用 GCC 4 7 2 编译的短程序g std c 11 test cc include
  • 使用 Susnpot Gem 进行 Solr 搜索

    我目前正在使用 sunspot gem 在我的 Rails 应用程序中实现全文搜索 通过 Sunspot Solr 在我的网站上进行的查询正在运行并返回正确的结果 但是 当我尝试使用 Solr 管理页面进行查询时 我很难显示结果 使用查询字
  • 开发截图 Chrome 扩展

    我在这里看到了很多答案 但没有一个是我要找的 我想从 chrome 扩展程序中截取我第一次看到的屏幕的屏幕截图 而无需滚动页面 并 提醒 创建的文件base64路径 我拥有所有正确的权限 permissions activeTab tabs
  • 在编译输出中包含外部类型定义

    我正在用 TypeScript 编写一个库 cjol core 它具有 JavaScript 依赖性dep 其中没有 types包可用 相反 我写了一个自定义dep d ts文件 这使得我在开发库时所有的类型都能很好地工作 一切编译都很好b
  • 使用本地 npm 注册表在 Hyperledger Composer 中实例化 Chaincode

    我想在没有任何互联网连接的环境中实例化链代码 由于链码容器将发出npm install实例化后 我添加了一个名为的新容器npmregistry in the docker composer yml因此它与 Fabric 容器的其余部分一起配
  • 在 Windows 上安装 TkinterTreectrl

    我尝试在Windows7上安装TkTreectrl但没有成功 我下载了2 0 1版本的包解压并尝试运行setup py 那个人总是首先抱怨文件夹 TkTreectrl 不存在 这是错误的 因为该文件夹随下载一起提供 并且我在 TkTreec
  • recyclerView 拖放后在 Room 中保存新位置

    我在我的应用程序中实现了带有拖放功能的 recyclerView 一切工作正常 直到应用程序重新启动 应用程序不会保存 记住任何拖放更改 我试过了 使用 SharedPreference GSON 阅读其他 SQLite 答案 如下所示 拖
  • 如何在javascript或jquery中获取没有页面的当前url

    如何在没有 Javascript 或 jQuery 页面的情况下获取当前 URL 例如 如果网址是 http www abc com music pop aspx http www abc com music pop aspx 我想获得没有
  • 如何存储大字典?

    我有一本大字典 28 MB MyDict 存储在MyDict py file 如果我执行语句 from MyDict import MyDict A MemoryError抛出异常 我如何使用访问这本词典cPickle or shelve模
  • 命名参数可以与 Python 枚举一起使用吗?

    Example class Planet Enum MERCURY mass 3 303e 23 radius 2 4397e6 def init self mass radius self mass mass in kilograms s
  • ruby:关键字“in”的含义是什么

    当我第一次在 ruby 中找到关键字 in 时 我想也许我可以这样做 1 英寸 0 10 但看起来我不能这样使用它 然后我在 ruby lang org 中搜索它 并用 google 进行搜索 没有答案 ruby 中关键字 in 的含义是什
  • oracle中的序列创建

    我想在oracle中创建一个序列 其中列字段 Empid 的最大值必须是序列的最小值 下面是我在同一个 stackexchange 中找到的 create sequence mytemp seq start with v Startval
  • KILL 信号会立即退出进程吗?

    我正在开发一个使用的服务器代码fork 并执行创建子进程 孩子的PID在以下情况下被注册fork 成功并清理时CHILD信号已被捕获 如果服务器需要停止 所有程序都会被终止 最终会发出 KILL 信号 现在 这是通过迭代所有注册的 PID
  • 刷新 PopupWindow.dismiss 上的父片段

    我有一个 popupWindow 它修改 SQLight 表 该表在父窗口中加载微调器 我希望当我关闭 PopupWindow 时 使用新值刷新父窗口中的微调器 下面的代码显示了我创建一个侦听器的进度 该侦听器将检测 PopupWindow
  • 使用 awk 获取一列的最大值,另一列的每个唯一值

    所以我有一个文件 例如 10 1 abc 10 2 def 10 3 ghi 20 4 elm 20 5 nop 20 6 qrs 30 3 tuv 我想为第一列的每个值获取第二列的最大值 即 10 3 ghi 20 6 qrs 30 3
  • 不允许特定字符串的 XML 架构限制模式

    我需要编写一个对字段进行限制的 XSD 架构 以确保 该字段的值在任何位置都不包含子字符串 FILENAME 例如 以下所有内容都必须无效 FILENAME ORIGINFILENAME FILENAMETEST 123FILENAME45