enumeration 제약 조건<?xml version="1.0"?>
<car>
Golf
</car>
<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:whiteSpace> 공백 처리" Golf " → " Golf "" Golf \n Audi " → " Golf Audi "" Golf " → "Golf"<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="car">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="collapse" />
<xs:enumeration value="Audi" />
<xs:enumeration value="Golf" />
<xs:enumeration value="BMW" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:schema>
<xs:pattern> 패턴 제약 조건<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="letter">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="collapse" />
<xs:pattern value="[a-z]+" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:schema>
: Complex Element(복합요소)에는 다른 요소 및 또는 속성이 포함되어 있다.
<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="employee">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string" />
<xs:element name="lastname" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="employee">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string" />
<xs:element name="lastname" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="employee" type="personinfo" />
<xs:complexType name="personinfo">
<xs:sequence>
<xs:element name="firstname" type="xs:string" />
<xs:element name="lastname" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:schema>
<?xml version="1.0"?>
<employee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="./EmployeeSchemaExtension.xsd">
<firstname>John</firstname>
<lastname>Smith</lastname>
<address>seoul</address>
<city>seongbook</city>
<country>korea</country>
</employee>
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="employee" type="fullpersoninfo" />
<xs:complexType name="personinfo">
<xs:sequence>
<xs:element name="firstname" type="xs:string" />
<xs:element name="lastname" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="fullpersoninfo">
<xs:complexContent>
<xs:extension base="personinfo">
<xs:sequence>
<xs:element name="address" type="xs:string" />
<xs:element name="city" type="xs:string" />
<xs:element name="country" type="xs:string" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>
personinfo를 기반으로 하여 확장된 복합 데이터 유형이다. 이 타입은 직원의 전체 정보를 포함한다.fullpersoninfo 내에서 사용되어 personinfo를 기반으로 하는 확장 내용을 정의한다.personinfo)을 확장하여 추가 요소(주소, 도시, 국가)를 포함하는 데 사용된다.: XML 스키마에서 자식 요소가 없거나 내용이 없는 요소를 정의하는 방식. 이러한 요소는 일반적으로 속성(attribute)만을 가질 수 있다.
<?xml version="1.0"?>
<product
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="./ElementWAttributeSchema.xsd"
prodid="1345" />
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="product" type="prodtype" />
<xs:complexType name="prodtype">
<xs:attribute name="prodid" type="xs:positiveInteger" />
</xs:complexType>
</xs:schema>
: Text와 element를 함께 사용할 때, complexType의 mixed 속성을 true로 설정하여 혼합된 콘텐츠를 표현할 수 있다.
<?xml version="1.0" encoding="UTF-8"?>
<letter
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="./Mixed.xsd">
Dear Mr. <name>John Smith</name>, Your order <orderid>1032</orderid> will be shipped on <shipdate>2001-07-13</shipdate>.
</letter>
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="letter">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="orderid" type="xs:string" />
<xs:element name="shipdate" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
: value도 있고, attribute도 있을 때
<tv frame = "color">tv1</tv>
<xs:element name="tv">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="frame" type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
: value는 없는 empty element이지만, attribute가 있을 때
<phone company="apple" />
<xs:element name="phone">
<xs:complexType>
<xs:attribute name="company"
type="xs:string" />
</xs:complexType>
</xs:element>
: element 안에 여러 개의 element를 가질 때
<message>
<sender>jerry</sender>
<receiver>tom</receiver>
<date>2024-02-28</date>
</message>
<xs:element name="message">
<xs:complexType>
<xs:sequence>
<xs:element name="sender" type="xs:string" />
<xs:element name="receiver" type="xs:string" />
<xs:element name="date" type="xs:date" />
</xs:sequence>
</xs:complexType>
</xs:element>
: sender, receiver를 분리시켜서 재사용할 때
<xs:element name="message">
<xs:complexType>
<xs:complexContent>
<xs:extension base="personGroup">
<xs:sequence>
<xs:element name="date" type="xs:date" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:complexType name="personGroup">
<xs:sequence>
<xs:element name="sender" type="xs:string" />
<xs:element name="receiver" type="xs:string" />
</xs:sequence>
</xs:complexType>
: 네 번째 예시에서 sender, receiver에 send_time attribute가 필요할 때
<message>
<sender send_time="2024-10-01">jerry</sender>
<receiver send_time="2024-10-02">tom</receiver>
<date>2024-02-28</date>
</message>
<xs:element name="message">
<xs:complexType>
<xs:complexContent>
<xs:extension base="personGroup">
<xs:sequence>
<xs:element name="date" type="xs:date" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:complexType name="personGroup">
<xs:sequence>
<xs:element name="sender" type="send_time" />
<xs:element name="receiver" type="send_time" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="send_time">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="send_time" type="xs:date" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
``