Bir XSD Örneği
- Önceki Sayfa XSD Eleman Değişimi
- Sonraki Sayfa XSD Dizgi
Bu bölümde size XML Schema yazmayı nasıl yazacağınızı göstereceğiz. Ayrıca, schema yazmanın farklı yöntemlerini de öğreneceksiniz.
XML belgesi
Bu adlı "shiporder.xml" XML belgesini inceleyelim:
<?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>George Bush</orderperson> <shipto> <name>John Adams</name> <address>Oxford Street</address> <city>London</city> <country>UK</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>
Yukarıdaki XML belgesi "shiporder" adlı kök eleman içerir, bu eleman "orderid" adlı bir özellik içerir. "shiporder" elemanı "orderperson"、"shipto" ve "item" adlı üç farklı alt eleman içerir. "item" elemanı iki kez ortaya çıkar, "title" adlı bir tane, seçmeli "note" elemanı, bir "quantity" ve bir "price" elemanı içerir.
Bu satır xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ile, XML解析器的 bu belgeyi belirli bir schema ile doğrulamak için bilgilendirir. Bu satır: xsi:noNamespaceSchemaLocation="shiporder.xsd" schema'nın konumunu belirtir (burada, "shiporder.xml" ile aynı klasörde bulunur).
Bir XML Schema oluşturun
Şimdi, yukarıdaki bu XML belgesi için bir schema oluşturmamız gerekiyor.
Yeni bir dosya açarak başlayabilir ve bu dosyayı "shiporder.xsd" olarak adlandırabiliriz. Schema oluşturmak için, sadece XML belgesindeki yapıyı izleyerek ve bulduğumuz her elementi tanımlamamız yeterlidir. Öncelikle, standart bir XML beyanı tanımlamaya başlarız:
<?xml version="1.0" encoding="ISO-8859-1" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> ... ... </xs:schema>
Yukarıdaki schema'da, standart isim uzantısını (xs) kullandık, bu isim uzantısı, Schema dil tanımı (Schema language definition) ile ilişkilidir ve standart değeri http://www.w3.org/2001/XMLSchema'dır.
Sonra, "shiporder" elementini tanımlamamız gerekiyor. Bu element, diğer elementleri içeren bir özellik içerir, bu yüzden onu karmaşık tür olarak tanımlıyoruz. "shiporder" elementinin alt elementleri xs:sequence elementi tarafından sarılmıştır ve alt elementlerin sırasını tanımlar:
<xs:element name="shiporder"> <xs:complexType> <xs:sequence> ... ... </xs:sequence> ... </xs:complexType> </xs:element>
Daha sonra, "orderperson" elementini basit tür olarak tanımlamamız gerekiyor (çünkü bu element没有任何属性或者其他的元素). Tür ön eki (xs:string) isim uzantısının belirlediği, bu isim uzantısı önceden tanımlanmış schema veri türleri ile ilişkilidir:
<xs:element name="orderperson" type="xs:string"/>
Sonra, iki elementi karmaşık tür olarak tanımlamam gerekiyor: "shipto" ve "item". "shipto" elementini tanımlamaya başlıyoruz:
<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>
Schema kullanarak, bir elementin ortaya çıkabileceği sıklığı maxOccurs ve minOccurs özellikleri ile tanımlayabiliriz. maxOccurs, bir elementin ortaya çıkabileceği maksimum sıklığı tanımlar,而minOccurs ise bir elementin ortaya çıkabileceği minimum sıklığını tanımlar. maxOccurs ve minOccurs'ın varsayılan değeri 1'dir!
Şimdi, "item" elementini tanımlayabiliriz. Bu element, "shiporder" elementi içinde birden fazla kez ortaya çıkabilir. Bu, "item" elementinin maxOccurs özelliğinin değerinin "unbounded" olarak ayarlanmasıyla elde edilir, böylece "item" elementi yaratıcının istediği kadar herhangi bir sayıda ortaya çıkabilir. Lütfen dikkat edin, "note" elementi seçmeli bir elementtir. Bu elementin minOccurs özelliğinin değerini 0 olarak ayarladık:
<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>
Şimdi, "shiporder" elementinin özelliklerini beyan edebiliriz. Bu bir zorunlu özellik olduğundan, use="required" olarak tanımlıyoruz.
Açıklama:Bu özelliğin beyanı, en sona konmalıdır:
<xs:attribute name="orderid" type="xs:string" use="required"/>
Bu "shiporder.xsd" adlı schema dosyasının belge listesi şu şekildedir:
<?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>
Schema Parçalama
Önceki tasarım yöntemi oldukça kolaydır, ancak belge karmaşık hale geldiğinde okunması ve yönetilmesi zorlaşır.
Önümüzdeki tasarım yöntemi, tüm elementler ve özelliklerin tanımlanmasının ardından ref özelliği kullanılarak onlara atıfta bulunmayı temel alır.
Bu schema dosyası yeni yöntemle tasarlanmıştır:
<?xml version="1.0" encoding="ISO-8859-1" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <!-- 简易元素的定义 --> <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"/> <!-- 属性的定义 --> <xs:attribute name="orderid" type="xs:string"/> <!-- 复合元素的定义 --> <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>
Belirtilen türleri (Adlandırılmış Türler) kullanarak
Üçüncü tasarım yöntemi sınıf veya türleri tanımlar, böylece element tanımlarının tekrar kullanılabilirliğini sağlar. Belirli yöntem şudur: Öncelikle basit element ve karmaşık elementlere adlandırma yapılır, ardından elementlerin type özellikleri aracılığıyla bu elementlere işaret edilir.
Bu şema dosyası ("shiporder.xsd") üçüncü yöntemle tasarlanmıştır:
<?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>
restriction ögesi, veri türünün W3C XML Schema adlandırma alanına ait olduğunu gösterir. Bu yüzden, aşağıdaki parça, eleman veya öznitelik değerlerinin string türünde olmasını gerektirir:
<xs:restriction base="xs:string">
restriction ögesi, genellikle elemanlara kısıtlamalar uygulamak için kullanılır. Aşağıdaki schema'dan alınan bu parçaları inceleyin:
<xs:simpleType name="orderidtype"> <xs:restriction base="xs:string"> <xs:pattern value="[0-9]{6}"/> </xs:restriction> </xs:simpleType>
Bu kod, element veya özelliğin değerininin dizgi olmasını ve sırası olarak altı karakter olmasını, ve bu karakterlerin 0-9 rakamlarından oluşmasını gerektirir.
- Önceki Sayfa XSD Eleman Değişimi
- Sonraki Sayfa XSD Dizgi