ตัวอย่าง XSD หนึ่ง

এই ধাপটি আপনাকে XML Schema লিখতে কিভাবে দেখাবে।আপনি স্কেমা লিখার বিভিন্ন পদ্ধতি জানবেন।

XML ডকুমেন্ট

আমরা এই "shiporder.xml" নামক XML ডকুমেন্টটি দেখুন:

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


 <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>

এই XML ডকুমেন্টটি "shiporder" নামক রূপরেখা নিয়ে আসে, যার মধ্যে "orderid" নামক একটি অত্যাবশ্যকীয় বৈশিষ্ট্য রয়েছে।"shiporder" রূপরেখা তিনটি ভিন্ন সাব-এলিমেন্টগুলি ধারণ করে: "orderperson"、"shipto" এবং "item"。"item" রূপরেখা দুবার দেখা যায়, যা "title" একটি অপশনাল "note" এলিমেন্ট, একটি "quantity" এবং একটি "price" এলিমেন্ট ধারণ করে。

এই একটি লাইন xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" থেকে XML পার্সারকে কোনো স্কেমা অনুযায়ী ডকুমেন্টটি পরীক্ষা করার নির্দেশ দেয়।এই লাইন: xsi:noNamespaceSchemaLocation="shiporder.xsd" স্কেমার অবস্থানটি নির্দিষ্ট করে (এখানে, তা "shiporder.xml"-এর একই ফোল্ডারে অবস্থিত)।

একটি XML Schema তৈরি করুন

এখন, আমরা উপরোক্ত XML ডকুমেন্ট-এর জন্য একটি schema তৈরি করতে হবে。

আমরা একটি নতুন ফাইল খুলতে শুরু করতে পারি, এবং এই ফাইল-কে "shiporder.xsd" নাম দিতে পারি।স্কিমা তৈরি করতে, আমরা শুধুমাত্র XML ডকুমেন্ট-এর কাঠামো অনুসরণ করতে হবে, এবং যেসব ইলেকট্রন-কে পাই তা নির্ধারণ করতে হবে।প্রথমে, আমরা একটি প্রমাণিত XML ঘোষণা নির্ধারণ করতে শুরু করি:

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

উপরোক্ত schema-তে, আমরা প্রমাণিত নামস্পেস (xs) ব্যবহার করেছি, এই নামস্পেস-এর সংক্রান্ত URI হল Schema-র ভাষা নির্ধারণ (Schema language definition), যার প্রমাণিত মান http://www.w3.org/2001/XMLSchema:

এখন, আমরা "shiporder" ইলেকট্রন-কে নির্ধারণ করতে হবে।এই ইলেকট্রন একটি প্রতিভা নিয়েছে, যার মধ্যে অন্যান্য ইলেকট্রন রয়েছে, তাই আমরা এটিকে কম্পোজিট টাইপ হিসাবে নির্ধারণ করি।"shiporder" ইলেকট্রন-এর সাব-ইলেকট্রন একটি xs:sequence ইলেকট্রন দ্বারা ঘিরে রয়েছে, যা সাব-ইলেকট্রন-এর ক্রমবর্ধমান নির্ধারণ করে:

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

তারপর, আমরা "orderperson" ইলেকট্রন-কে সিম্পল টাইপ হিসাবে "defin" করতে হবে (এটা কারণ এটি কোনও প্রতিভা বা অন্যান্য ইলেকট্রন নেই)।টাইপ (xs:string) এর প্রেফিক্স নামস্পেস প্রেফিক্স দ্বারা নির্দিষ্ট, এই নামস্পেস একটি প্রতিবেদিত XML স্কিমা এর প্রতিবেদিত স্কিমা ডাটা টাইপ সংক্রান্ত একটি XML স্কিমা সংক্রান্ত:

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

এখন, আমি দুটি ইলেকট্রন "shipto" এবং "item"-কে কম্পোজিট টাইপ হিসাবে "defin" করতে হবে: "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>

স্কিমা দ্বারা, আমরা "maxOccurs" এবং "minOccurs" প্রতিভাদ্বারা কোনও ইলেকট্রন কতবার ব্যবহার করা যেতে পারে তা নির্ধারণ করতে পারি।"maxOccurs" একটি ইলেকট্রন কতবার ব্যবহার করা যেতে পারে তা নির্ধারণ করে, এবং "minOccurs" একটি ইলেকট্রন কতবার ব্যবহার করা যেতে পারে তা নির্ধারণ করে।"maxOccurs" এবং "minOccurs" এর ডিফল্ট মান 1!

এখন, আমরা "item" ইলেকট্রন "defin" করতে পারি।এই ইলেকট্রন "shiporder" ইলেকট্রন ভিতরে একাধিকবার ব্যবহার করা যেতে পারে।এটা "item" ইলেকট্রন "maxOccurs" প্রতিভার মান "unbounded" হিসাবে সংজ্ঞায়িত করে হয়, তারপর "item" ইলেকট্রন ক্রীতা ইচ্ছানুসারে কোনও কোনও সংখ্যকবার ব্যবহার করা যেতে পারে।প্রতিবেদন, "note" ইলেকট্রন অপশনাল ইলেকট্রন।আমরা এই ইলেকট্রন "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" 元类的属性了。因为这是一个必选属性,我们规定 use="required"。。

注释了。该属性的声明必须被置于最后:

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

这是该名为 "shiporder.xsd" 的 schema 文件的文档列表。

<?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

前面的设计方法非常方便,但对文档很笑得读课和管理。

下来介绍的设计方法基于首先对所有元类和属性的定义,然后使用 ref 属性来参依它们。

这是用新方法设计的 schema 文件。

<?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>

নির্দিষ্ট টাইপ (নামকরণকৃত টাইপ) ব্যবহার করা

তৃতীয় ডিজাইন পদ্ধতি ক্লাস বা টাইপ নির্দিষ্ট করে, যার মাধ্যমে আমরা এলিমেন্টের নির্দিষ্টকরণকে পুনরায় ব্যবহার করতে পারি। বিশেষ পদ্ধতি হল: প্রথমে সরল এবং সংযোজিত এলিমেন্টকে নামকরণ করুন, তারপর এলিমেন্টের type অ্যাট্রিবিউট দিয়ে তাদের ইঙ্গিত করুন。

এটি তৃতীয় পদ্ধতিতে ডিজাইন করা স্কিমা ফাইল ('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>

restriction তাত্ত্বিক বিষয়টি বলতে হল যে ডাটা টাইপটি W3C XML Schema নামকরণ সমষ্টি থেকে উদ্ভূত। তাই, নিচের স্পষ্ট বিষয়টি বলতে হল যে এলিমেন্ট বা অ্যাট্রিবিউটের মানটি শব্দচিহ্নের মানের বিষয়টি হবে:

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

องค์ประกอบ restriction มักถูกใช้เพื่อจำกัดองค์ประกอบ โปรดดูชิ้นส่วนดังต่อไปนี้จาก schema ดังกล่าว

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

รหัสนี้บอกว่าค่าขององค์ประกอบหรือคุณสมบัติต้องเป็นข้อความ และต้องเป็นหกตัวอักษรต่อเนื่อง และตัวอักษรเหล่านี้ต้องเป็นตัวเลข 0-9