如何在XML架构定义中表示IP地址?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在XML架构定义中表示IP地址?相关的知识,希望对你有一定的参考价值。

我想在我的XML Schema Definition(XSD)中定义一个类型,它代表IPv4 address中的dot-decimal notation,所以在我的XML中:

<Example>
    <Address>192.168.0.1</Address>
</Example>

将被验证为正确和不正确的值,例如:

<Example>
    <Address>192.268.0.1</Address>
</Example>

被拒绝为无效。

答案

在XSD文件中使用以下类型定义:

<xs:simpleType name="IPv4Address">
  <xs:annotation>
    <xs:documentation>IPv4 address in dot-decimal notation. Equivalent to [0-255].[0-255].[0-255].[0-255]</xs:documentation>
  </xs:annotation>
  <xs:restriction base="xs:string">
    <xs:pattern value="((1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5]).){3}(1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])" />
  </xs:restriction>
</xs:simpleType>

这将仅接受四个点分隔字段中每个字段中的值0到255。

模式的解释

模式是:

((1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5]).){3}(1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])

这只是这个组子句:

(1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])

在它之后用{3}点重复.三次,然后再一次没有点。

|栏将该组子句分为三个替代匹配:

1?[0-9]?[0-9]匹配从0到199的所有数字。 2[0-4][0-9]匹配三位数字,从2开始,从200到249。 25[0-5]匹配250到255

示例在架构中使用

一旦定义,类型可以在架构中使用,如下所示:

<xs:element name="Example">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="Address" maxOccurs="1" type="IPv4Address" />
    </xs:sequence>
  </xs:complexType>
</xs:element>

以上是关于如何在XML架构定义中表示IP地址?的主要内容,如果未能解决你的问题,请参考以下文章

如果它们来自数据源,如何在 graphql 模式中表示枚举?

如何在 SQL 数据库中表示非 SQL 自定义模式结构

如何在数据库中表示银行账户信息?

如何在 Objective C 中表示当前的 JSON 模式?

如何在 GADT 中表示此 FSM

如何在 .NET 中表示 URN(统一资源名称),以便 Equals 按预期工作