XSD ইউনিট রিপ্লেসমেন্ট (Element Substitution)

XML স্কেমা দ্বারা, একটি এলিমেন্ট অন্য এলিমেন্টকে রিপ্লেস করতে পারে。

এলিমেন্ট রিপ্লেস

আমরা একটি উদাহরণ দিই: আমাদের ব্যবহারকারী যুক্তরাজ্য এবং নরওয়ে থেকে এসেছে। আমরা চাই যে, ব্যবহারকারীরা XML ডকুমেন্টে নরওয়েজীয় বা ইংরেজি ইলেকট্রন নাম ব্যবহার করতে পারেন।

এই সমস্যা সমাধান করতে, আমরা XML schema-তে একটি substitutionGroup।প্রথমে, আমরা প্রধান ইলেকট্রনকে ঘোষণা করি, তারপর আমরা উপ-ইলেকট্রনকে ঘোষণা করি যারা প্রধান ইলেকট্রনকে প্রতিস্থাপন করতে পারে।

<xs:element name="name" type="xs:string"/>
<xs:element name="navn" substitutionGroup="name"/>

উপরোক্ত উদাহরণে, "name" ইলেকট্রন হল প্রধান ইলেকট্রন এবং "navn" ইলেকট্রন "name" ইলেকট্রনকে প্রতিস্থাপন করতে পারে。

নিচের XML schema-র একটি অংশ দেখুন:

<xs:element name="name" type="xs:string"/>
<xs:element name="navn" substitutionGroup="name"/>
<xs:complexType name="custinfo">
  <xs:sequence>
    <xs:element ref="name"/>
  </xs:sequence>
</xs:complexType>
<xs:element name="customer" type="custinfo"/>
<xs:element name="kunde" substitutionGroup="customer"/>

প্রাসঙ্গিক XML ডকুমেন্ট এইরকম হওয়া উচিত (উপরোক্ত schema অনুযায়ী):

<customer>
  <name>John Smith</name>
</customer>

বা এইরকম:

<kunde>
  <navn>John Smith</navn>
</kunde>

ইলেকট্রনের প্রতিস্থাপন প্রতিরোধ

অন্য কোনো বিশেষ ইলেকট্রনের প্রতিস্থাপন প্রতিরোধ করতে, block অ্যাট্রিবিউট ব্যবহার করুন:

<xs:element name="name" type="xs:string"> block="substitution"/>

নিচের XML schema-র একটি অংশ দেখুন:

<xs:element name="name" type="xs:string" block="substitution"/>
<xs:element name="navn" substitutionGroup="name"/>
<xs:complexType name="custinfo">
  <xs:sequence>
    <xs:element ref="name"/>
  </xs:sequence>
</xs:complexType>
<xs:element name="customer" type="custinfo" block="substitution"/>
<xs:element name="kunde" substitutionGroup="customer"/>

প্রাসঙ্গিক XML ডকুমেন্ট এইরকম হওয়া উচিত (উপরোক্ত schema অনুযায়ী):

<customer>
  <name>John Smith</name>
</customer>

কিন্তু নিচের ডকুমেন্ট নিষ্পক্ষ হয়েছে:

<kunde>
  <navn>John Smith</navn>
</kunde>

substitutionGroup ব্যবহার করা

রিপ্লেসমেন্ট ইউনিটের ধরনটি প্রধান ইউনিটের সমমান হতে হবে, বা প্রধান ইউনিট থেকে উদ্ভূত হতে হবে।যদি রিপ্লেসমেন্ট ইউনিটের ধরনটি প্রধান ইউনিটের সমমান হয়, তবে রিপ্লেসমেন্ট ইউনিটের ধরনটি নির্দিষ্ট করা উচিত নয়。

দৃষ্টান্ত দিয়ে বলা হয়েছে যে, substitutionGroup-এর সকল ইউনিট (প্রধান ইউনিট ও রিপ্লেসমেন্ট ইউনিট) গ্লোবাল ইউনিট হিসাবে ঘোষণা করা উচিত, না তবে তা কাজ করবে না!

গ্লোবাল ইউনিট (Global Elements) কি এটা?

গ্লোবাল ইউনিট "schema" ইউনিটের সরাসরি সাব-ইউনিট! স্থানীয় ইউনিট (Local elements) অন্য ইউনিটের মধ্যে নিহিত ইউনিট