Latest web development tutorials

XML 스키마 인스턴스

이 섹션에서는 XML 스키마를 작성하는 방법을 보여줍니다. 또한 스키마를 작성하는 다른 방법을 배울 것입니다.


XML 문서

이제,이에 소위 "shiporder.xml"XML 문서를 살펴 보자 :

<?xml version="1.0" encoding="ISO-8859-1"?>

<shiporder orderid="889923"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="shiporder.xsd">
<orderperson>John Smith</orderperson>
<shipto>
<name>Ola Nordmann</name>
<address>Langgt 23</address>
<city>4000 Stavanger</city>
<country>Norway</country>
</shipto>
<item>
<title>Empire Burlesque</title>
<note>Special Edition</note>
<quantity>1</quantity>
<price>10.90</price>
</item>
<item>
<title>Hide your heart</title>
<quantity>1</quantity>
<price>9.90</price>
</item>
</shiporder>

속성이 포함 된 위의 XML 문서의 루트 요소 "shiporder는"의 "OrderID를"이름을 지정해야합니다. "orderperson", "shipto"와 "항목": "Shiporder"요소는 세 가지 하위 요소가 포함되어 있습니다. "항목"요소가 두 번 표시하고는 "제목"선택 "참고"소자, "양"과 "가격"요소가 포함되어 있습니다.

위 라인의 xmlns : XSI는 = "http://www.w3.org/2001/XMLSchema-instance"이 문서의 유효성을 검사 할 수있는 XML 파서를 기반으로 스키마를 말했다. 라인 : XSI :의 noNamespaceSchemaLocation = "shiporder.xsd"스키마 (이 경우 같은 폴더에, 그것은 "shiporder.xml"에서) 위치를 정의합니다.


XML 스키마 만들기

이제, 우리는 위의 XML 문서에 대한 스키마를 작성해야합니다.

우리는 새 파일을 열어 시작할 수 있으며,이 파일은 "shiporder.xsd"라는. 스키마를 만들려면, 우리는 그냥 단순히 XML 문서 구조, 우리가 발견 한 것은 정의의 각 요소를 따라야합니다. 첫째, 우리는 표준 XML 선언을 정의하기 :

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

위의 스키마, 우리는 표준 값은 http://www.w3.org/은 표준 네임 스페이스 (XS),이 이름과 연관된 URI 공간 (스키마 언어 정의)의 스키마 언어 정의되어 사용 2001 / 된 XMLSchema.

다음으로, 우리는 "shiporder"요소를 정의 할 필요가있다. 이 요소는 따라서 우리는 복합 유형으로 식별 다른 요소를 포함하는 속성이 있습니다. 하위 요소 "shiporder"요소는 XS입니다 : 요소가 둘러싸여 순서가 하위 요소의 순서를 정의합니다 :

<xs:element name="shiporder">
<xs:complexType>
<xs:sequence>
...
</xs:sequence>
</xs:complexType>
</xs:element>

(그것이 어떤 속성이나 다른 요소가 포함되어 있지 않기 때문에) 그 다음 우리는 "orderperson"요소는 단순 유형으로 정의 할 필요가있다. 종류 (XS : 문자열)과 관련된 스키마 데이터 유형의 XML 스키마 미리 정의 된이 네임 스페이스와 지침의 네임 스페이스 접두사 규정에 의해 접두어 :

<xs:element name="orderperson" type="xs:string"/>

"shipto"와 "아이템"다음, 나는 복잡한 유형으로 정의 된 두 가지 요소가 필요합니다. 우리는 정의에 의해 시작 "shipto"요소가 시작됩니다 :

<xs:element name="shipto">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>

스키마에 의해, 우리는 소자에 minOccurs은 maxOccurs 및 속성을 사용하여 발생할 수있는 횟수를 정의 할 수있다. maxOccurs에 요소의 최대 개수 표시를 정의하고에 minOccurs는 요소의 발생의 최소 수를 정의한다. 기본은 maxOccurs과에 minOccurs는 1입니다!

이제, 우리의 "항목"요소를 정의 할 수 있습니다. 이 요소는 "shiporder"요소 내에 여러 번 나타날 수 있습니다. 이것은 값이 "항목"요소가 원하는대로 작성자가 여러 번 표시 될 수 있도록, 달성하기 위해 "무제한"로 설정되어있는 "항목"요소 maxOccurs에 의해 속성 이루어집니다. 주의하시기 바랍니다 요소는 선택 사항이며 "주의". 이 요소의 우리는이에 minOccurs 속성은 0으로 설정됩니다 :

<xs:element name="item" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="note" type="xs:string" minOccurs="0"/>
<xs:element name="quantity" type="xs:positiveInteger"/>
<xs:element name="price" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:element>

우리는 지금 요소의 "shiporder"속성을 선언 할 수 있습니다. 이 필수 속성입니다, 우리는 사용을 지정 = "이 필요합니다."

참고 :이 속성은 마지막에 선언해야합니다 :

<xs:attribute name="orderid" type="xs:string" use="required"/>

이것은 "shiporder.xsd"스키마 파일이라는 문서의 목록이다 :

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

<xs:element name="shiporder">
<xs:complexType>
<xs:sequence>
<xs:element name="orderperson" type="xs:string"/>
<xs:element name="shipto">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="item" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="note" type="xs:string" minOccurs="0"/>
<xs:element name="quantity" type="xs:positiveInteger"/>
<xs:element name="price" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="orderid" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>

</xs:schema>


분할 스키마

설계 방법 앞에서 매우 간단하지만, 판독 문서 복잡하다 Shique 유지하는 것이 곤란하다.

다음에, 모든 요소와 특성의 첫 번째 정의에 기재된 설계 방법에 기초하고 REF가이를 참조하는 속성을 사용한다.

이 새로운 접근 방식은 스키마 파일 ( "shiporder.xsd")를 설계 :

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

<!-- definition of simple elements -->
<xs:element name="orderperson" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
<xs:element name="title" type="xs:string"/>
<xs:element name="note" type="xs:string"/>
<xs:element name="quantity" type="xs:positiveInteger"/>
<xs:element name="price" type="xs:decimal"/>

<!-- definition of attributes -->
<xs:attribute name="orderid" type="xs:string"/>

<!-- definition of complex elements -->
<xs:element name="shipto">
<xs:complexType>
<xs:sequence>
<xs:element ref="name"/>
<xs:element ref="address"/>
<xs:element ref="city"/>
<xs:element ref="country"/>
</xs:sequence>
</xs:complexType>
</xs:element>

<xs:element name="item">
<xs:complexType>
<xs:sequence>
<xs:element ref="title"/>
<xs:element ref="note" minOccurs="0"/>
<xs:element ref="quantity"/>
<xs:element ref="price"/>
</xs:sequence>
</xs:complexType>
</xs:element>

<xs:element name="shiporder">
<xs:complexType>
<xs:sequence>
<xs:element ref="orderperson"/>
<xs:element ref="shipto"/>
<xs:element ref="item" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute ref="orderid" use="required"/>
</xs:complexType>
</xs:element>

</xs:schema>


지정된 형식을 사용하여 (유형 이름)

우리는 재사용 요소를 정의하는 능력을 갖도록 설계 세번째 방법은, 클래스 또는 유형을 정의한다. 구체적인 방법은 다음과 같습니다 간단하고 복잡한 요소 이름의 첫 번째 요소, 한 다음를 가리 키도록 요소의 속성을 입력

이 세 번째 방법은 설계 스키마 파일 ( "shiporder.xsd")의 사용이다 :

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

<xs:simpleType name="stringtype">
<xs:restriction base="xs:string"/>
</xs:simpleType>

<xs:simpleType name="inttype">
<xs:restriction base="xs:positiveInteger"/>
</xs:simpleType>

<xs:simpleType name="dectype">
<xs:restriction base="xs:decimal"/>
</xs:simpleType>

<xs:simpleType name="orderidtype">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]{6}"/>
</xs:restriction>
</xs:simpleType>

<xs:complexType name="shiptotype">
<xs:sequence>
<xs:element name="name" type="stringtype"/>
<xs:element name="address" type="stringtype"/>
<xs:element name="city" type="stringtype"/>
<xs:element name="country" type="stringtype"/>
</xs:sequence>
</xs:complexType>

<xs:complexType name="itemtype">
<xs:sequence>
<xs:element name="title" type="stringtype"/>
<xs:element name="note" type="stringtype" minOccurs="0"/>
<xs:element name="quantity" type="inttype"/>
<xs:element name="price" type="dectype"/>
</xs:sequence>
</xs:complexType>

<xs:complexType name="shipordertype">
<xs:sequence>
<xs:element name="orderperson" type="stringtype"/>
<xs:element name="shipto" type="shiptotype"/>
<xs:element name="item" maxOccurs="unbounded" type="itemtype"/>
</xs:sequence>
<xs:attribute name="orderid" type="orderidtype" use="required"/>
</xs:complexType>

<xs:element name="shiporder" type="shipordertype"/>

</xs:schema>

W3C의 XML 스키마 네임 스페이스 데이터 유형으로부터 유래 된 데이터의 종류를 나타내는 제한 요소. 따라서, 다음 단편 요소 또는 속성 값의 값은 문자열 입력되어야한다는 것을 의미 :

<xs:restriction base="xs:string">

제한 요소들은 요소들에 제한을 부과하는 데 사용된다. 위의 스키마에서 다음 조각을 고려 :

<xs:simpleType name="orderidtype">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]{6}"/>
</xs:restriction>
</xs:simpleType>

이 코드는 요소 나 속성의 값이 문자열이어야하고, 연속 6 자이어야하며, 이러한 문자는 0-9이어야 함을 나타냅니다.