【问题标题】:Disallow an element name in entire XML document using XSD使用 XSD 禁止在整个 XML 文档中使用元素名称
【发布时间】:2018-12-05 12:14:13
【问题描述】:

我正在使用 XSD 文件来验证一些 XML 文件。一条规则是在 xml 中不允许使用任何脚本,特别是在这种情况下是 xhtml 文档。 我认为我们需要在 XSD 文件中指定整个文档中不允许有 tag name = "script"。如何实现这种控制?

作为初学者是我尝试过的XSD世界

      <xs:element name="script" maxOccurs="0"/>

但显然它不起作用。

【问题讨论】:

    标签: xml xsd xsd-validation xml-validation


    【解决方案1】:

    XSD 1.0

    你不能直接表达文档中不能存在script元素的约束,但是你可以省略script并且不允许它进入:只要不要在任何元素的任何内容模型中使用它,并且不要将xsd:anylaxskip@processContents 一起使用。

    XSD 1.1

    在 XSD 1.1 中,您可以使用 xsd:assert 进一步限制 xsd:any[@processContents='strict'](在任何需要 xsd:any 的地方,甚至是根元素的全部内容):

    <xs:assert test="every $e in .//* satisfies $e[not(self::script)]"/>
    

    【讨论】:

    • 此外,XSD 1.1 有选项&lt;xs:any notQName="script"/&gt;。我以前从未见过它的用途......
    • 感谢您的回答。我无法立即测试这些解决方案,因为该项目是 .Net 并且不支持 XSD 1.1。也许我应该使用撒克逊语来解决这个问题......
    • 为 XSD 1.0(在 .NET 中本机支持)和 XSD 1.1(在 .NET 中通过 Saxon 支持)提供了解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-02
    • 1970-01-01
    相关资源
    最近更新 更多