【问题标题】:XML Schema: exclude HTML entities and control characters from stringsXML Schema:从字符串中排除 HTML 实体和控制字符
【发布时间】:2018-03-07 12:53:33
【问题描述】:

是否存在从 XML 实例中的字符串中排除 HTML 实体和其他控制字符的 XSD 数据类型?

【问题讨论】:

    标签: xml xsd html-entities control-characters


    【解决方案1】:

    不,不存在排除 HTML 字符实体或控制字符的内置 XSD 数据类型,但您可能不需要,因为 XML 的格式良好的法则已经排除

    1. 文档中未定义且未定义的字符实体 predefined:

      <!ENTITY lt     "&#38;#60;">
      <!ENTITY gt     "&#62;">
      <!ENTITY amp    "&#38;#38;">
      <!ENTITY apos   "&#39;">
      <!ENTITY quot   "&#34;">
      
    2. Unicode characters 在代理块 FFEE 和 FFFF 中,这是该产生式不允许的:

      Char::= #x9 | #xA | #xD | [#x20-#xD7FF]|[#xE000-#xFFFD]|[#x10000-#x10FFFF]
      

    如果您仍希望排除其他字符,您可以定义一个类型,将 xs:string 限制为,例如,排除 Unicode general category Other 类别,这将排除以下所有类别:

    C Other   Cc | Cf | Cs | Co | Cn
    Cc    Control a C0 or C1 control code
    Cf    Format  a format control character
    Cs    Surrogate   a surrogate code point
    Co    Private_Use a private-use character
    Cn    Unassigned  a reserved unassigned code point or a noncharacter
    

    通过此 XSD 类型:

    <xs:simpleType name="NoUnicodeOtherCodePointsString">
      <xs:restriction base="xs:string">
        <xs:pattern value="[\P{C}]*"/>
      </xs:restriction>
    </xs:simpleType>
    

    【讨论】:

    • 我认为你的意思是像这样否定模式中的类:&lt;xs:pattern value="[^\P{C}]*"/&gt;。此外,这与 ASCII 字符集无关,也与 C0 Controls and Basic Latin 块无关。
    • @TomBlodget:如果我写的是小写的\p{C},你会是对的,但大写的\P{C} 只允许“可打印”字符是正确的。如果你想提出一个比 ASCIIprintableString 更好的名字,我很乐意接受这个建议,只要这个名字并不意味着我必须明确说明一些长长的字符列表. :-) 谢谢。
    • @TomBlodget:当然,感谢您推动改进受限字符串类型的名称。答案更新为更好的类型名称和\P{C} 的解释。谢谢。
    猜你喜欢
    • 2011-05-12
    • 1970-01-01
    • 2020-03-28
    • 2010-12-02
    • 2012-09-11
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    相关资源
    最近更新 更多