jjzjj

XSD 限定 / Facets

runoob 2023-04-07 原文

XSD 限定 / Facets


限定(restriction)用于为 XML 元素或者属性定义可接受的值。对 XML 元素的限定被称为 facet。


对值的限定

下面的例子定义了带有一个限定且名为 "age" 的元素。age 的值不能低于 0 或者高于 120:

<xs:element name="age">
  <xs:simpleType>
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="0"/>
      <xs:maxInclusive value="120"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>


对一组值的限定

如需把 XML 元素的内容限制为一组可接受的值,我们要使用枚举约束(enumeration constraint)。

下面的例子定义了带有一个限定的名为 "car" 的元素。可接受的值只有:Audi, Golf, BMW:

<xs:element name="car">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:enumeration value="Audi"/>
      <xs:enumeration value="Golf"/>
      <xs:enumeration value="BMW"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

上面的例子也可以被写为:

<xs:element name="car" type="carType"/>

<xs:simpleType name="carType">
  <xs:restriction base="xs:string">
    <xs:enumeration value="Audi"/>
    <xs:enumeration value="Golf"/>
    <xs:enumeration value="BMW"/>
  </xs:restriction>
</xs:simpleType>

注意: 在这种情况下,类型 "carType" 可被其他元素使用,因为它不是 "car" 元素的组成部分。


对一系列值的限定

如需把 XML 元素的内容限制定义为一系列可使用的数字或字母,我们要使用模式约束(pattern constraint)。

下面的例子定义了带有一个限定的名为 "letter" 的元素。可接受的值只有小写字母 a - z 其中的一个:

<xs:element name="letter">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:pattern value="[a-z]"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

下一个例子定义了带有一个限定的名为 "initials" 的元素。可接受的值是大写字母 A - Z 其中的三个:

<xs:element name="initials">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:pattern value="[A-Z][A-Z][A-Z]"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

下一个例子也定义了带有一个限定的名为 "initials" 的元素。可接受的值是大写或小写字母 a - z 其中的三个:

<xs:element name="initials">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:pattern value="[a-zA-Z][a-zA-Z][a-zA-Z]"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

下一个例子定义了带有一个限定的名为 "choice 的元素。可接受的值是字母 x, y 或 z 中的一个:

<xs:element name="choice">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:pattern value="[xyz]"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

下一个例子定义了带有一个限定的名为 "prodid" 的元素。可接受的值是五个阿拉伯数字的一个序列,且每个数字的范围是 0-9:

<xs:element name="prodid">
  <xs:simpleType>
    <xs:restriction base="xs:integer">
      <xs:pattern value="[0-9][0-9][0-9][0-9][0-9]"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>


对一系列值的其他限定

下面的例子定义了带有一个限定的名为 "letter" 的元素。可接受的值是 a - z 中零个或多个字母:

<xs:element name="letter">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:pattern value="([a-z])*"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

下面的例子定义了带有一个限定的名为 "letter" 的元素。可接受的值是一对或多对字母,每对字母由一个小写字母后跟一个大写字母组成。举个例子,"sToP"将会通过这种模式的验证,但是 "Stop"、"STOP" 或者 "stop" 无法通过验证:

<xs:element name="letter">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:pattern value="([a-z][A-Z])+"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

下面的例子定义了带有一个限定的名为 "gender" 的元素。可接受的值是 male 或者 female:

<xs:element name="gender">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:pattern value="male|female"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

下面的例子定义了带有一个限定的名为 "password" 的元素。可接受的值是由 8 个字符组成的一行字符,这些字符必须是大写或小写字母 a - z 亦或数字 0 - 9:

<xs:element name="password">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:pattern value="[a-zA-Z0-9]{8}"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>


对空白字符的限定

如需规定对空白字符(whitespace characters)的处理方式,我们需要使用 whiteSpace 限定。

下面的例子定义了带有一个限定的名为 "address" 的元素。这个 whiteSpace 限定被设置为 "preserve",这意味着 XML 处理器不会移除任何空白字符:

<xs:element name="address">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:whiteSpace value="preserve"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

这个例子也定义了带有一个限定的名为 "address" 的元素。这个 whiteSpace 限定被设置为 "replace",这意味着 XML 处理器将移除所有空白字符(换行、回车、空格以及制表符):

<xs:element name="address">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:whiteSpace value="replace"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

这个例子也定义了带有一个限定的名为 "address" 的元素。这个 whiteSpace 限定被设置为 "collapse",这意味着 XML 处理器将移除所有空白字符(换行、回车、空格以及制表符会被替换为空格,开头和结尾的空格会被移除,而多个连续的空格会被缩减为一个单一的空格):

<xs:element name="address">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:whiteSpace value="collapse"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>


对长度的限定

如需限制元素中值的长度,我们需要使用 length、maxLength 以及 minLength 限定。

本例定义了带有一个限定且名为 "password" 的元素。其值必须精确到 8 个字符:

<xs:element name="password">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:length value="8"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

这个例子也定义了带有一个限定的名为 "password" 的元素。其值最小为 5 个字符,最大为 8 个字符:

<xs:element name="password">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:minLength value="5"/>
      <xs:maxLength value="8"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>


数据类型的限定

限定 描述
enumeration 定义可接受值的一个列表
fractionDigits 定义所允许的最大的小数位数。必须大于等于0。
length 定义所允许的字符或者列表项目的精确数目。必须大于或等于0。
maxExclusive 定义数值的上限。所允许的值必须小于此值。
maxInclusive 定义数值的上限。所允许的值必须小于或等于此值。
maxLength 定义所允许的字符或者列表项目的最大数目。必须大于或等于0。
minExclusive 定义数值的下限。所允许的值必需大于此值。
minInclusive 定义数值的下限。所允许的值必需大于或等于此值。
minLength 定义所允许的字符或者列表项目的最小数目。必须大于或等于0。
pattern 定义可接受的字符的精确序列。
totalDigits 定义所允许的阿拉伯数字的精确位数。必须大于0。
whiteSpace 定义空白字符(换行、回车、空格以及制表符)的处理方式。

有关XSD 限定 / Facets的更多相关文章

  1. ruby - Ruby 中的 XSD 模式验证 - 2

    我找到了几个关于如何根据模式验证xml文档的来源,但我有一个ruby​​应用程序,我需要在其中验证用户提供的模式本身是否是有效的模式。有没有办法让我检查这个?是否有用于验证XSD架构的XSD架构?或者是否有图书馆或gem可以为我做到这一点? 最佳答案 您可以使用Nokogiri为此:beginschema=Nokogiri::XML::Schema(File.read('invalid_schema.xsd'))rescueNokogiri::XML::SyntaxError=>eputs"InvalidXMLSchema!"end

  2. ruby - 带有表双下划线的 Sequel gem 限定查询列名 - 2

    使用Sequelgem:employees=DB[:prm_master__employee.identifier].join(:prm_master__employee_custom_fields.identifier,:employee=>:employee).where("termination_date>=?","06/01/2012").or("termination_date=NULL").and("employee='holderl'")以上失败:~/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/sequel-3.

  3. ruby - 从 XSD 生成 Ruby 类 - 2

    有没有一种方法可以从XSD生成Ruby类(甚至可能是ActiveResource类),以便它们包含一种将类序列化为对初始XSD有效的xml的方法?我知道soap4r有xsd2ruby,但生成的ruby​​类似乎不能轻易序列化为xml。 最佳答案 无耻的self推销(希望这在stackoverflow上没问题)但我正在开发一个开源项目来做that它仍在进行中(请随时发送补丁),但最终目标是将XSD与Ruby类相互转换(现在正在这样做),并将符合该XSD的XML与这些类的实例相互转换。 关于

  4. 用于使用 xsd :import 使用 Web 服务 wsdl 的 Ruby gem - 2

    我们需要使用一个web服务,它有一个使用xsd:import进行数据类型定义的WSDL。savongem不支持,因为它使用芥末。我们正在使用Ruby1.9.2你能给我推荐一些gem吗?问候苏伦丹 最佳答案 不幸的是,似乎没有任何Gem可以满足您的需求。我对这种情况的建议:使用SoapUI检查Web服务使用Savon编写您的客户端http://savonrb.com我已经这样做过好几次了,这里有很多人可以帮助您采用这种方法。 关于用于使用xsd:import使用Web服务wsdl的Ruby

  5. javascript - &lt;script&gt; 标签内的函数是如何限定作用域/命名空间的? - 2

    我正在使用我们正在使用Knockout.js和jQuery构建的新应用程序。我更喜欢"usestrict"在我的脚本中,但由于我们使用的某些库不适用于"usestrict"那么我必须使用函数形式。我不喜欢在中放置javascript标签内联,所以我通常将所有内容放在一个单独的文件中,以便它可以被预处理器缩小和gzip压缩。鉴于这些条件,我想知道当您在脚本标记中创建函数时,默认情况下函数是如何限定范围的。现在我只是在做这样的事情:$((function(win){"usestrict";win.myFunction=function(){//dostuff};}(window)));如您

  6. javascript - 如何在 Rails 应用程序上有效地限定 javascript set css 的范围? - 2

    在我的Rails应用程序上确定我的javascript和css文件的范围时遇到了很多麻烦。通过范围界定,我的意思是:如何处理仅在一个页面或一个Controller中使用的java脚本和CSS?我尝试了一些解决方案,但它们都很复杂且不够优雅:我看到了一些这样的建议:像这样将我的.js文件直接包含在我的.erb文件中:然后在应用程序布局中生成它。但这意味着再向服务器发出一个请求以获取.js文件。我认为为应用程序保留一个.js文件和一个.css文件很重要,它们由Assets管道创建我看到了一些其他建议,例如测试我的HTML标记是否出现在带有.length的DOM上jquery的方法。这仍然意

  7. 用于匹配完全限定域名的 Javascript 正则表达式,无协议(protocol),可选子域 - 2

    我没能找到这个,我正在尝试的方法对我来说不太奏效。我只想匹配符合以下条件的域:不包含协议(protocol)(http、https、ftp)可选择包含一个子域不要以连字符开头,但可以包含连字符匹配的示例域:domain.comexample.domain.comexample.domain-hyphen.comwww.domain.comexample.museum不匹配的示例域:http://example.comsubdomain.-example.comexample.com/parameterexample.com?anythingwww.subdomain.domain.co

  8. c# - 如何提高 XSD 验证的冗长程度 - 2

    我通过使用XmlDocument.Validate(ValidationEventHandler)、XDocument.Validate(schemas,ValidationEventHandler)和XmlReader探索了各种类型的xsdxml验证传递给它的架构将结果发送到ValidationEventHandler回调。然而,回调实际上只提供严重性和错误字符串。我收到这样的消息:The'name'attributeisinvalid-Thevalue''isinvalidaccordingtoitsdatatype'TNonEmptyStringNoWhitespacesAtBe

  9. xml - XSD 架构命名空间问题 -- cvc-complex-type.2.4.a - 2

    我正在尝试读取一个XML文件,但他一直抛出这个错误:cvc-complex-type.2.4.a:Invalidcontentwasfoundstartingwithelement'contact'.Oneof'{contact}'isexpected.lineNumber:2;columnNumber:68;cvc-elt.1:Cannotfindthedeclarationofelement'contacts'.]我已在网上搜索以寻找答案。如果我删除我的targetNamespace,那么它不会提示找不到元素,但它会开始提示找不到我在tns命名空间中声明的自定义类型。我在这里验证它

  10. java - 使用过时的 XSD 解析 XML - 2

    我在一个大型企业平台上进行集成,供应商喜欢经常更新他们的XML格式,尽管他们promise所做的更改将继续向后兼容。我有一个可以工作的XSD……现在……但我想用我们的应用程序代码部署该架构,而不必为每个Web服务更新重新部署。作为额外的插入力,(基于JVM的)configurationlanguage具有非常不错的XSD类型导入。作为备用,我可以使用XPath查询提取特定元素,但这不太令人愉快。我如何才能继续根据过时但不是过时的模式文件解析不断发展的XML?我正在寻找类似“松散解析”选项或“忽略未知标签”的选项,它们将使我能够访问我们的应用程序当前知道和关心的文档部分。可以丢弃任何新标

随机推荐