xsd:在基类型中定义的restrict属性

xsd:在基类型中定义的restrict属性,xsd,Xsd,考虑以下xsd。对于Addr,city可以是任何字符串。我想限制USAddr中的city属性遵循一些正则表达式。我该怎么做?请注意,基本类型“Addr”中的城市应该仍然可以有任何字符串,而不受任何限制。谢谢 <?xml version="1.0"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:complexType name="Addr"> <xs:attribute na

考虑以下xsd。对于Addr,city可以是任何字符串。我想限制USAddr中的city属性遵循一些正则表达式。我该怎么做?请注意,基本类型“Addr”中的城市应该仍然可以有任何字符串,而不受任何限制。谢谢

<?xml version="1.0"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:complexType name="Addr">
  <xs:attribute name="city" type="xs:string" use="required"/>
</xs:complexType>


<xs:complexType name="USAddr">
  <xs:complexContent>
    <xs:extension base="Addr">
      <xs:attribute name="state" type="xs:string" use="required"/>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

<xs:element name="addr" type="USAddr"/>

</xs:schema>

xml:


属性可以是任何简单类型,简单类型可以有限制。首先,用所需的正则表达式定义一个简单类型:

<xs:simpleType name="USCity">
  <xs:restriction base="xs:string">
     <xs:pattern value="[a-zA-Z\.]+ ([a-zA-Z]+)*"/> <!-- For example -->
  </xs:restriction>
</xs:simpleType>


然后将城市属性的类型设置为“USCity”。

我忘了提到基本类型Addr应该接受城市的任何字符串。因此,我无法在基本类型Addr中将城市类型更改为USCity。您可以重新定义类型或实体,但恐怕无法在类型扩展中重新定义属性,这是必需的。在本例中,我建议USAddr和Addr是两种不同的类型,它们碰巧具有相似(但不完全相同)的结构。
<xs:simpleType name="USCity">
  <xs:restriction base="xs:string">
     <xs:pattern value="[a-zA-Z\.]+ ([a-zA-Z]+)*"/> <!-- For example -->
  </xs:restriction>
</xs:simpleType>