一个 XSD 实例

এই অধ্যায়টি আপনাকে XML Schema লিখতে কিভাবে দেখাবে। আপনি স্কেমা লিখতে বিভিন্ন পদ্ধতি শিখবেন।

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>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" নামে নামকরণ করতে পারি। schema তৈরি করতে, আমরা শুধুমাত্র XML ডকুমেন্টের স্ট্রাকচার অনুসরণ করে, যা আমরা পাইয়েছি, প্রত্যেক ইলেকট্রনকে সংজ্ঞা দিই। প্রথমে, আমরা একটি স্ট্যান্ডার্ড XML ডিক্লারেশন শুরু করি:

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

উপরোক্ত schema-তে, আমরা প্রমাণিত নামস্পেস (xs) ব্যবহার করেছি, যা স্কিমা ল্যাঙ্গুয়েজ ডিফাইনিশন (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" ইলেকট্রনকে সরল টাইপ হিসাবে সংজ্ঞা দিতে হবে (কারণ এটা কোনও অ্যাট্রিবিউট বা অন্য ইলেকট্রন নেই)। টাইপ (xs:string) এর প্রেফিক্স নামস্পেসের প্রেফিক্স দ্বারা নির্ধারিত, যা প্রিডিফাইন্ড স্কিমা ডাটা টাইপসের XML স্কিমা সংযুক্ত হয়:

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

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

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

এখন, আমরা "item" ইলেকট্রনের সংজ্ঞা দিতে পারি। এই ইলেকট্রন "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 এর সংখ্যা।