【发布时间】:2018-03-07 12:53:33
【问题描述】:
是否存在从 XML 实例中的字符串中排除 HTML 实体和其他控制字符的 XSD 数据类型?
【问题讨论】:
标签: xml xsd html-entities control-characters
是否存在从 XML 实例中的字符串中排除 HTML 实体和其他控制字符的 XSD 数据类型?
【问题讨论】:
标签: xml xsd html-entities control-characters
不,不存在排除 HTML 字符实体或控制字符的内置 XSD 数据类型,但您可能不需要,因为 XML 的格式良好的法则已经排除
文档中未定义且未定义的字符实体 predefined:
<!ENTITY lt "&#60;"> <!ENTITY gt ">"> <!ENTITY amp "&#38;"> <!ENTITY apos "'"> <!ENTITY quot """>
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>
【讨论】:
<xs:pattern value="[^\P{C}]*"/>。此外,这与 ASCII 字符集无关,也与 C0 Controls and Basic Latin 块无关。
\p{C},你会是对的,但大写的\P{C} 只允许“可打印”字符是正确的。如果你想提出一个比 ASCIIprintableString 更好的名字,我很乐意接受这个建议,只要这个名字并不意味着我必须明确说明一些长长的字符列表. :-) 谢谢。
\P{C} 的解释。谢谢。