以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 DTD/XML Schema 』  (http://bbs.xml.org.cn/list.asp?boardid=23)
----  [分享]一个完整的Schema,包含名称空间的使用,对不知道如何写Schema的同学很有帮助  (http://bbs.xml.org.cn/dispbbs.asp?boardid=23&rootid=&id=60817)


--  作者:a309303973
--  发布时间:4/2/2008 9:56:00 PM

--  [分享]一个完整的Schema,包含名称空间的使用,对不知道如何写Schema的同学很有帮助
resume.xml:
<?xml version="1.0" encoding="UTF-8"?>
<resume xmlns="we:love:xml:schemas:but:we:hate:namespaces" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="we:love:xml:schemas:but:we:hate:namespaces resume.xsd">
                 
   <PersonName>
      <Names><Title>严振华</Title></Names>
   </PersonName>
   <Address>
      <StreetAddress>厦门大学海韵校区一期</StreetAddress>
      <City>厦门</City>
      <StateOrProvince>福建</StateOrProvince>
      <PostalCode>363105</PostalCode>
      <Country>China</Country>
   </Address>
   <PhoneNumber>*********</PhoneNumber>
   <Email>yzhxiada123456@126.com</Email>
   <Degree>undergraduate</Degree>
   
</resume>  
resume.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xf="we:love:xml:schemas:but:we:hate:namespaces" targetNamespace="we:love:xml:schemas:but:we:hate:namespaces" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:include schemaLocation="reusable.xsd"/>
 <xs:element name="resume">
  <xs:complexType>
   <xs:sequence>
    <xs:element ref="xf:PersonName"/>
    <xs:element ref="xf:Address"/>
    <xs:element name="PhoneNumber" type="xf:PhoneType"/>
    <xs:element name="Email" type="xf:EmailType"/>
    <xs:element name="Degree" type="xf:DegreeType"/>
   </xs:sequence>
  </xs:complexType>
 </xs:element>
 <xs:element name="Address">
  <xs:complexType>
   <xs:sequence>
    <xs:element name="StreetAddress" type="xs:string" maxOccurs="unbounded"/>
    <xs:element name="City" type="xs:string"/>
    <xs:element name="StateOrProvince" type="xs:string" minOccurs="0"/>
    <xs:element name="PostalCode" type="xs:string"/>
    <xs:element name="Country" type="xf:CountryType"/>
   </xs:sequence>
  </xs:complexType>
 </xs:element>
 <xs:element name="PersonName">
  <xs:complexType>
   <xs:sequence>
    <xs:choice>
     <xs:element name="FullName" type="xs:string"/>
     <xs:element ref="xf:Names"/>
    </xs:choice>
   </xs:sequence>
  </xs:complexType>
 </xs:element>
 <xs:element name="Names">
  <xs:complexType>
   <xs:annotation>
    <xs:documentation>All parts of the names types are optional, and there may be multiple
    middle names, so it has a wrapper element.</xs:documentation>
   </xs:annotation>
   <xs:sequence>
    <xs:element name="Title" type="xs:string" minOccurs="0"/>
    <xs:element name="GivenName" type="xs:string" minOccurs="0"/>
    <xs:element name="MidleName" type="xs:string" minOccurs="0"/>
    <xs:element name="FamilyName" type="xs:string" minOccurs="0"/>
    <xs:element name="Suffix" type="xs:string" minOccurs="0"/>
   </xs:sequence>
  </xs:complexType>
 </xs:element>
 <xs:simpleType name="DegreeType">
  <xs:restriction base="xs:string">
   <xs:enumeration value="undergraduate"/>
   <xs:enumeration value="pupil"/>
   <xs:enumeration value="senior"/>
   <xs:enumeration value="graduate student"/>
   <xs:enumeration value="doctor"/>
   <xs:enumeration value="postdoctor"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="PhoneType">
  <xs:restriction base="xs:string">
   <xs:minLength value="7"/>
   <xs:maxLength value="12"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="EmailType">
  <xs:restriction base="xs:string">
   <xs:pattern value="[_a-z0-9-]+(\.[a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*"/>
  </xs:restriction>
 </xs:simpleType>
 
</xs:schema>
注意改xsd引用了reusable.xsd里的CountryType类型,还有是正则表达式的使用,注意xf的使用,因为有xmlns:xf="we:love:xml:schemas:but:we:hate:namespaces" targetNamespace="we:love:xml:schemas:but:we:hate:namespaces" elementFormDefault="qualified" attributeFormDefault="unqualified">,所以所有的全局元素和类型都属于空间we:love:xml:schemas:but:we:hate:namespaces,还有xml中的开头要导入名称空间xf。
reusable.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="we:love:xml:schemas:but:we:hate:namespaces"
 xmlns:xs="http://www.w3.org/2001/XMLSchema"
 xmlns:xf="we:love:xml:schemas:but:we:hate:namespaces" elementFormDefault="qualified"
 attributeFormDefault="unqualified">
 <xs:element name="Address" type="xf:AddressType">
  <xs:annotation>
   <xs:documentation>This reusable Address element draws on the AddressType from UBL. This
    element should be reused in your resume schema.</xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="AddressType">
  <xs:annotation>
   <xs:documentation>This is a type meant to represent a generic address. It consists of an
    unlimited number of street addresses, a city, state or province, a postal code, and
    country. It is suggested that if need be, on a transform use conditional processing
    based on the Country element to get country specific layouts of the
   addresses.</xs:documentation>
  </xs:annotation>
  <xs:sequence>
   <xs:element name="StreetAddress" maxOccurs="unbounded" minOccurs="1" type="xs:string"/>
   <xs:element name="City" maxOccurs="1" minOccurs="1"/>
   <xs:element name="StateOrProvince" type="xs:string" maxOccurs="1" minOccurs="0"/>
   <xs:element name="PostalCode" type="xs:string" maxOccurs="1"/>
   <xs:element name="Country" type="xf:CountryType"/>
  </xs:sequence>
 </xs:complexType>
 <xs:simpleType name="CountryType">
  <xs:annotation>
   <xs:documentation>This is a restriction of the simple type String, limiting selection to
    only those valuses that represent actual countries or defacto autonomous countries.
    This list was taken from http://projectvisa.com/fullcountrylist.asp, and may or may
    not be complete.</xs:documentation>
  </xs:annotation>
  <xs:restriction base="xs:string">
   <xs:enumeration value="Afghanistan"/>
   <xs:enumeration value="Albania"/>
   <xs:enumeration value="Algeria"/>
   <xs:enumeration value="American Samoa"/>
   <xs:enumeration value="Andorra"/>
   <xs:enumeration value="Angola"/>
   <xs:enumeration value="Anguilla"/>
   <xs:enumeration value="Antigua and Barbuda"/>
   <xs:enumeration value="Argentina"/>
   <xs:enumeration value="Armenia"/>
   <xs:enumeration value="Aruba"/>
   <xs:enumeration value="Australia"/>
   <xs:enumeration value="Austria"/>
   <xs:enumeration value="Azerbaijan"/>
   <xs:enumeration value="Bahamas"/>
   <xs:enumeration value="Bahrain"/>
   <xs:enumeration value="Bangladesh"/>
   <xs:enumeration value="Barbados"/>
   <xs:enumeration value="Belarus"/>
   <xs:enumeration value="Belgium"/>
   <xs:enumeration value="Belize"/>
   <xs:enumeration value="Benin"/>
   <xs:enumeration value="Bermuda"/>
   <xs:enumeration value="Bhutan"/>
   <xs:enumeration value="Bolivia"/>
   <xs:enumeration value="Bosnia-Herzegovina"/>
   <xs:enumeration value="Botswana"/>
   <xs:enumeration value="Bouvet Island"/>
   <xs:enumeration value="Brazil"/>
   <xs:enumeration value="Brunei"/>
   <xs:enumeration value="Bulgaria"/>
   <xs:enumeration value="Burkina Faso"/>
   <xs:enumeration value="Burundi"/>
   <xs:enumeration value="Cambodia"/>
   <xs:enumeration value="Cameroon"/>
   <xs:enumeration value="Canada"/>
   <xs:enumeration value="Cape Verde"/>
   <xs:enumeration value="Cayman Islands"/>
   <xs:enumeration value="Central African Republic"/>
   <xs:enumeration value="Chad"/>
   <xs:enumeration value="Chile"/>
   <xs:enumeration value="China"/>
   <xs:enumeration value="Christmas Island"/>
   <xs:enumeration value="Cocos Islands"/>
   <xs:enumeration value="Colombia"/>
   <xs:enumeration value="Comoros"/>
   <xs:enumeration value="Conch Republic"/>
   <xs:enumeration value="Congo, Democratic Republic of the"/>
   <xs:enumeration value="Congo, Republic of"/>
   <xs:enumeration value="Cook Islands"/>
   <xs:enumeration value="Costa Rica"/>
   <xs:enumeration value="Croatia"/>
   <xs:enumeration value="Cuba"/>
   <xs:enumeration value="Cyprus"/>
   <xs:enumeration value="Czech Republic"/>
   <xs:enumeration value="Denmark"/>
   <xs:enumeration value="Djibouti"/>
   <xs:enumeration value="Dominica"/>
   <xs:enumeration value="Dominican Republic"/>
   <xs:enumeration value="Ecuador"/>
   <xs:enumeration value="Egypt"/>
   <xs:enumeration value="El Salvador"/>
   <xs:enumeration value="Equatorial Guinea"/>
   <xs:enumeration value="Eritrea"/>
   <xs:enumeration value="Estonia"/>
   <xs:enumeration value="Ethiopia"/>
   <xs:enumeration value="Falkland Islands"/>
   <xs:enumeration value="Faroe Islands"/>
   <xs:enumeration value="Fiji"/>
   <xs:enumeration value="Finland"/>
   <xs:enumeration value="France"/>
   <xs:enumeration value="French Guiana"/>
   <xs:enumeration value="Gabon"/>
   <xs:enumeration value="Gambia"/>
   <xs:enumeration value="Georgia"/>
   <xs:enumeration value="Germany"/>
   <xs:enumeration value="Ghana"/>
   <xs:enumeration value="Gibraltar"/>
   <xs:enumeration value="Greece"/>
   <xs:enumeration value="Greenland"/>
   <xs:enumeration value="Grenada"/>
   <xs:enumeration value="Guadeloupe"/>
   <xs:enumeration value="Guam"/>
   <xs:enumeration value="Guatemala"/>
   <xs:enumeration value="Guinea"/>
   <xs:enumeration value="Guinea Bissau"/>
   <xs:enumeration value="Guyana"/>
   <xs:enumeration value="Haiti"/>
   <xs:enumeration value="Holy See"/>
   <xs:enumeration value="Honduras"/>
   <xs:enumeration value="Hong Kong"/>
   <xs:enumeration value="Hungary"/>
   <xs:enumeration value="Iceland"/>
   <xs:enumeration value="India"/>
   <xs:enumeration value="Indonesia"/>
   <xs:enumeration value="Iran"/>
   <xs:enumeration value="Iraq"/>
   <xs:enumeration value="Ireland"/>
   <xs:enumeration value="Israel"/>
   <xs:enumeration value="Italy"/>
   <xs:enumeration value="Ivory Coast"/>
   <xs:enumeration value="Jamaica"/>
   <xs:enumeration value="Japan"/>
   <xs:enumeration value="Jordan"/>
   <xs:enumeration value="Kazakhstan"/>
   <xs:enumeration value="Kenya"/>
   <xs:enumeration value="Kiribati"/>
   <xs:enumeration value="Kuwait"/>
   <xs:enumeration value="Kyrgyzstan"/>
   <xs:enumeration value="Laos"/>
   <xs:enumeration value="Latvia"/>
   <xs:enumeration value="Lebanon"/>
   <xs:enumeration value="Lesotho"/>
   <xs:enumeration value="Liberia"/>
   <xs:enumeration value="Libya"/>
   <xs:enumeration value="Liechtenstein"/>
   <xs:enumeration value="Lithuania"/>
   <xs:enumeration value="Luxembourg"/>
   <xs:enumeration value="Macau"/>
   <xs:enumeration value="Macedonia"/>
   <xs:enumeration value="Madagascar"/>
   <xs:enumeration value="Malawi"/>
   <xs:enumeration value="Malaysia"/>
   <xs:enumeration value="Maldives"/>
   <xs:enumeration value="Mali"/>
   <xs:enumeration value="Malta"/>
   <xs:enumeration value="Marshall Islands"/>
   <xs:enumeration value="Martinique"/>
   <xs:enumeration value="Mauritania"/>
   <xs:enumeration value="Mauritius"/>
   <xs:enumeration value="Mayotte"/>
   <xs:enumeration value="Mexico"/>
   <xs:enumeration value="Micronesia"/>
   <xs:enumeration value="Moldova"/>
   <xs:enumeration value="Monaco"/>
   <xs:enumeration value="Mongolia"/>
   <xs:enumeration value="Montserrat"/>
   <xs:enumeration value="Morocco"/>
   <xs:enumeration value="Mozambique"/>
   <xs:enumeration value="Myanmar"/>
   <xs:enumeration value="Namibia"/>
   <xs:enumeration value="Nauru"/>
   <xs:enumeration value="Nepal"/>
   <xs:enumeration value="Netherlands"/>
   <xs:enumeration value="Netherlands Antilles"/>
   <xs:enumeration value="New Caledonia"/>
   <xs:enumeration value="New Zealand"/>
   <xs:enumeration value="Nicaragua"/>
   <xs:enumeration value="Niger"/>
   <xs:enumeration value="Nigeria"/>
   <xs:enumeration value="Niue"/>
   <xs:enumeration value="Norfolk Island"/>
   <xs:enumeration value="North Korea"/>
   <xs:enumeration value="Northern Mariana Islands"/>
   <xs:enumeration value="Norway"/>
   <xs:enumeration value="Oman"/>
   <xs:enumeration value="Pakistan"/>
   <xs:enumeration value="Palau"/>
   <xs:enumeration value="Panama"/>
   <xs:enumeration value="Papua New Guinea"/>
   <xs:enumeration value="Paraguay"/>
   <xs:enumeration value="Peru"/>
   <xs:enumeration value="Philippines"/>
   <xs:enumeration value="Pitcairn Island"/>
   <xs:enumeration value="Poland"/>
   <xs:enumeration value="Polynesia"/>
   <xs:enumeration value="Portugal"/>
   <xs:enumeration value="Puerto Rico"/>
   <xs:enumeration value="Qatar"/>
   <xs:enumeration value="Reunion"/>
   <xs:enumeration value="Romania"/>
   <xs:enumeration value="Russia"/>
   <xs:enumeration value="Rwanda"/>
   <xs:enumeration value="S. Georgia and S. Sandwich Isls."/>
   <xs:enumeration value="Saint Kitts and Nevis"/>
   <xs:enumeration value="Saint Lucia"/>
   <xs:enumeration value="Saint Pierre and Miquelon"/>
   <xs:enumeration value="Saint Vincent and Grenadines"/>
   <xs:enumeration value="Samoa"/>
   <xs:enumeration value="San Marino"/>
   <xs:enumeration value="Sao Tome and Principe"/>
   <xs:enumeration value="Saudi Arabia"/>
   <xs:enumeration value="Schengen countries"/>
   <xs:enumeration value="Senegal"/>
   <xs:enumeration value="Serbia and Montenegro"/>
   <xs:enumeration value="Seychelles"/>
   <xs:enumeration value="Sierra Leone"/>
   <xs:enumeration value="Singapore"/>
   <xs:enumeration value="Slovakia"/>
   <xs:enumeration value="Slovenia"/>
   <xs:enumeration value="Solomon Islands"/>
   <xs:enumeration value="Somalia"/>
   <xs:enumeration value="South Africa"/>
   <xs:enumeration value="South Korea"/>
   <xs:enumeration value="Spain"/>
   <xs:enumeration value="Sri Lanka"/>
   <xs:enumeration value="Sudan"/>
   <xs:enumeration value="Suriname"/>
   <xs:enumeration value="Svalbard and Jan Mayen Islands"/>
   <xs:enumeration value="Swaziland"/>
   <xs:enumeration value="Sweden"/>
   <xs:enumeration value="Switzerland"/>
   <xs:enumeration value="Syria"/>
   <xs:enumeration value="Taiwan"/>
   <xs:enumeration value="Tajikistan"/>
   <xs:enumeration value="Tanzania"/>
   <xs:enumeration value="Thailand"/>
   <xs:enumeration value="Timor-Leste"/>
   <xs:enumeration value="Togo"/>
   <xs:enumeration value="Tokelau"/>
   <xs:enumeration value="Tonga"/>
   <xs:enumeration value="Trinidad and Tobago"/>
   <xs:enumeration value="Tunisia"/>
   <xs:enumeration value="Turkey"/>
   <xs:enumeration value="Turkmenistan"/>
   <xs:enumeration value="Turks and Caicos Islands"/>
   <xs:enumeration value="Tuvalu"/>
   <xs:enumeration value="Uganda"/>
   <xs:enumeration value="Ukraine"/>
   <xs:enumeration value="United Arab Emirates"/>
   <xs:enumeration value="United Kingdom"/>
   <xs:enumeration value="United States"/>
   <xs:enumeration value="Uruguay"/>
   <xs:enumeration value="Uzbekistan"/>
   <xs:enumeration value="Vanuatu"/>
   <xs:enumeration value="Venezuela"/>
   <xs:enumeration value="Vietnam"/>
   <xs:enumeration value="Virgin Islands"/>
   <xs:enumeration value="Wallis and Futuna Islands"/>
   <xs:enumeration value="Yemen"/>
   <xs:enumeration value="Zambia"/>
   <xs:enumeration value="Zimbabwe"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:complexType name="PersonalNameType">
  <xs:annotation>
   <xs:documentation>And now we create a personal name type within this schema's namespace.
    The personal name element can either be one long string of the full name or a series
    of elements for each part of the name. This type should be reused in your resume
    schema.</xs:documentation>
  </xs:annotation>
  <xs:sequence>
   <xs:choice>
    <xs:element name="FullName" type="xs:string"/>
    <xs:element name="Names" type="xf:NamesType"/>
   </xs:choice>
  </xs:sequence>
 </xs:complexType>
 <xs:complexType name="NamesType">
  <xs:annotation>
   <xs:documentation>All parts of the names types are optional, and there may be multiple
    middle names, so it has a wrapper element.</xs:documentation>
  </xs:annotation>
  <xs:sequence>
   <xs:element name="Title" type="xs:string" minOccurs="0"/>
   <xs:element name="GivenName" type="xs:string" minOccurs="0"/>
   <xs:element name="MiddleNames" type="xf:MiddleNamesType" minOccurs="0"/>
   <xs:element name="FamilyName" type="xs:string" minOccurs="0"/>
   <xs:element name="Suffix" type="xs:string" minOccurs="0"/>
  </xs:sequence>
 </xs:complexType>
 <xs:complexType name="MiddleNamesType">
  <xs:annotation>
   <xs:documentation>And finally, the list of middle names.</xs:documentation>
  </xs:annotation>
  <xs:sequence>
   <xs:element name="MiddleName" type="xs:string" maxOccurs="unbounded"/>
  </xs:sequence>
 </xs:complexType>
</xs:schema>


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
93.750ms