উত্তর:
থেকে DTDs এবং স্কিমা মধ্যে পার্থক্য বিভাগে রূপান্তর একটি DTD একটি স্কিমা মধ্যে নিবন্ধ:
ডিটিডি এবং এক্সএমএল স্কিমার মধ্যে তাত্পর্যপূর্ণ পার্থক্য হ'ল এক্সএমএল স্কিমা একটি এক্সএমএল-ভিত্তিক সিনট্যাক্স ব্যবহার করে, অন্যদিকে ডিটিডিগুলিতে এসজিএমএল ডিটিডি থেকে একটি অনন্য সিনট্যাক্স থাকে। যদিও ডিটিডিগুলি প্রায়শই একটি নতুন সিনট্যাক্স শেখার প্রয়োজনের কারণে সমালোচিত হয়, সিনট্যাক্সটি নিজেই বেশ ক্ষয় হয়। বিপরীতটি এক্সএমএল স্কিমার ক্ষেত্রে সত্য, যা ভার্বোস, তবে ট্যাগ এবং এক্সএমএলও ব্যবহার করে যাতে এক্সএমএলের লেখকরা এক্সএমএল স্কিমার সিনট্যাক্সটি কম ভয় দেখায়।
ডিটিডিগুলির লক্ষ্য ছিল এসজিএমএল ডিটিডিগুলিকে এক্সএমএল ডিটিডি তে রূপান্তর করতে পারে এমন অ্যাপ্লিকেশনগুলির জন্য এসজিএমএলের সাথে সামঞ্জস্যতার একটি স্তর বজায় রাখা। যাইহোক, এক্সএমএলের একটি লক্ষ্য রেখে, "এক্সএমএল মার্কআপে সংক্ষিপ্ততার ন্যূনতম গুরুত্ব রয়েছে," সিনট্যাক্স সংক্ষিপ্ত রাখার ক্ষেত্রে কোনও সত্যিকারের উদ্বেগ নেই।
[...]
সুতরাং যখন আমরা একটি ডিটিডি রূপান্তর করছি তখন অন্যান্য কিছু পার্থক্য কী বিশেষত গুরুত্বপূর্ণ হতে পারে? এর কটাক্ষপাত করা যাক.
টাইপিং
ডিটিডি এবং এক্সএমএল স্কিমার মধ্যে সর্বাধিক উল্লেখযোগ্য পার্থক্য হ'ল উপাদান এবং বৈশিষ্ট্য ঘোষণার সাথে মিলে স্কিমায় ডেটাটাইপগুলি তৈরি এবং ব্যবহারের সক্ষমতা। আসলে, এটি এত গুরুত্বপূর্ণ একটি পার্থক্য যে এক্সএমএল স্কিমা সুপারিশের অর্ধেকটি ডেটাটাইপিং এবং এক্সএমএল স্কিমাতে উত্সর্গীকৃত। "XML স্কিমা ডেটাটাইপস" এই বইয়ের তৃতীয় খণ্ডে আমরা বিশদ সহ ডেটাটাইপগুলি কভার করি।
[...]
সংঘটন সীমাবদ্ধতা
আর একটি ক্ষেত্র যেখানে ডিটিডি এবং স্কিমা উল্লেখযোগ্যভাবে পার্থক্য হ'ল ঘটনা সীমাবদ্ধতার সাথে। আপনি যদি অধ্যায় 2, "স্কিমা স্ট্রাকচার" (বা ডিটিডি সহ আপনার নিজের কাজ) আমাদের পূর্ববর্তী উদাহরণগুলি থেকে স্মরণ করেন তবে তিনটি চিহ্ন রয়েছে যা আপনি কোনও উপাদানের উপস্থিতি সংখ্যা সীমাবদ্ধ করতে ব্যবহার করতে পারেন: *, + এবং?
[...]
Enumerations
সুতরাং, আসুন আমরা বলি যে আমাদের একটি উপাদান রয়েছে, এবং আমরা শার্টের জন্য একটি আকারের বৈশিষ্ট্যটি সংজ্ঞায়িত করতে সক্ষম হতে চেয়েছিলাম, যা ব্যবহারকারীদের একটি আকার বেছে নিতে দেয়: ছোট, মাঝারি বা বড়। আমাদের ডিটিডি এর মতো দেখাবে:
<!ELEMENT item (shirt)> <!ELEMENT shirt (#PCDATA)> <!ATTLIST shirt size_value (small | medium | large)>
[...]
তবে আমরা যদি
size
একটি উপাদান হতে চাই ? আমরা এটি একটি ডিটিডি দিয়ে করতে পারি না। ডিটিডি একটি উপাদানের পাঠ্য সামগ্রীতে গণনার জন্য সরবরাহ করে না। যাইহোক, স্কিমার সাথে ডেটাটাইপগুলির কারণে, যখন আমরা পূর্ববর্তী উদাহরণে অঙ্কটি ঘোষণা করেছিলাম, আমরা আসলে একটি কলsimpleType
তৈরি করেছিsize_values
যা আমরা এখন একটি উপাদান দিয়ে ব্যবহার করতে পারি:<xs:element name="size" type="size_value">
[...]
এক্সএমএল স্কিমা সংজ্ঞা (এক্সএসডি) এবং নথি প্রকার সংজ্ঞা (টিটিডি) এর মধ্যে পার্থক্যগুলির মধ্যে রয়েছে:
আপডেট : 2015.08.26
এই সমস্ত বুলেট পয়েন্ট 100% সঠিক নয়, তবে আপনি সারাংশ পাবেন।
অন্য দিকে:
যেমনটি আগেও উল্লেখ করেছেন, এক্সএমএল স্কিমা একটি এক্সএমএল-ভিত্তিক সিনট্যাক্স ব্যবহার করে এবং ডিটিডিগুলির একটি অনন্য সিনট্যাক্স থাকে। ডিটিডি ডেটাটাইপগুলি সমর্থন করে না, যা গুরুত্বপূর্ণ।
একটি খুব সাধারণ উদাহরণ দেখা যাক যেখানে বিশ্ববিদ্যালয়ে একাধিক শিক্ষার্থী রয়েছে এবং প্রতিটি শিক্ষার্থীর দুটি নাম "নাম" এবং "বছর" রয়েছে। দয়া করে মনে রাখবেন যে আমি আমার মন্তব্যে "// ->" ব্যবহার করেছি কেবল মন্তব্যের জন্য।
এখন আমি এই উদাহরণটি ডিটিডি এবং এক্সএসডি উভয় ক্ষেত্রেই লিখব।
DTD
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE university[ // --> university as root element
<!ELEMENT university (student*)> // --> university has * = Multiple students
<!ELEMENT student (name,year)> // --> Student has elements name and year
<!ELEMENT name (#PCDATA)> // --> name as Parsed character data
<!ELEMENT year (#PCDATA)> // --> year as Parsed character data
]>
<university>
<student>
<name>
John Niel //---> I can also use an Integer,not good
</name>
<year>
2000 //---> I can also use a string,not good
</year>
</student>
</university>
এক্সএমএল স্কিমা সংজ্ঞা (এক্সএসডি)
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name ="uniType"> //--> complex datatype uniType
<xsd:sequence>
<xsd:element ref="student" maxOccurs="unbounded"/> //--> has unbounded no.of students
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="stuType"> //--> complex datatype stuType
<xsd:sequence>
<xsd:element ref="name"/> //--> has element name
<xsd:element ref="year"/> //--> has element year
</xsd:sequence>
</xsd:complexType>
<xsd:element name="university" type="uniType"/> //--> university of type UniType
<xsd:element name="student" type="stuType"/> //--> student of type stuType
<xsd:element name="name" type="xsd:string"/> //--> name of datatype string
<xsd:element name="year" type="xsd:integer"/> //--> year of datatype integer
</xsd:schema>
<?xml version="1.0" encoding="UTF-8"?>
<university>
<student>
<name>
John Niel
</name>
<year>
2000 //--> only an Integer value is allowed
</year>
</student>
</university>
ডিটিডি এক্সএমএলকে পূর্বাভাস দেয় এবং তাই এটি এক্সএমএল বৈধ নয়। এটি সম্ভবত এক্সএসডি আবিষ্কারের বৃহত্তম কারণ।
both specify elements, attributes, nesting, ordering, #occurences
XSD also has data types, (typed) pointers, namespaces, keys and more.... unlike DTD
তবুও এক্সএসডি যদিও সামান্য ভার্বোজ, এর সিনট্যাক্সটি এক্সএমএল এর বর্ধন, এটি দ্রুত শিখতে সুবিধাজনক করে তোলে।
1
, 0 or 1
, 0 or more
, যখন XSD সর্বনিম্ন এবং সর্বোচ্চ সংখ্যা নির্দিষ্ট করতে পারেন।
একটি পার্থক্য হ'ল একটি ডিটিডি-তে কোনও উপাদানটির সামগ্রী মডেল সম্পূর্ণরূপে তার নাম দ্বারা নির্ধারিত হয়, ডকুমেন্টে এটি যেখানে প্রদর্শিত হয় তা থেকে:
ধরে নিচ্ছি আপনি চান
person
উপাদানname
name
নিজেই শিশু উপাদান first
এবং last
।এটার মত
<person>
<name>
<first></first>
<last></last>
</name>
</person>
একটি এমন city
একই নথিতে উপাদান এছাড়াও একটি শিশুর উপাদান 'NAME' থাকতে হবে DTD প্রয়োজন যে এই 'নাম' উপাদান সন্তান উপাদান থাকতে হবে first
এবং last
হিসাবে ভাল। সত্য যে সত্ত্বেও city.name
প্রয়োজন হয় না first
এবং last
শিশুদের হিসাবে।
বিপরীতে, এক্সএমএল স্কিমা আপনাকে স্থানীয়ভাবে শিশুদের উপাদানগুলির ধরণের ঘোষণা করতে দেয়; আপনি name
উভয় person
এবং city
পৃথক পৃথক জন্য শিশু উপাদান ঘোষণা করতে পারে । সুতরাং তাদের সেই প্রসঙ্গে তাদের যথাযথ সামগ্রী মডেল প্রদান করা।
অন্যান্য বড় পার্থক্য হ'ল নেমস্পেসের জন্য সমর্থন। যেহেতু ডিটিডিগুলি মূল এক্সএমএল স্পেসিফিকেশনের অংশ (এবং এসজিএমএল থেকে উত্তরাধিকার সূত্রে প্রাপ্ত), সেগুলি মোটেও নেমস্পেস-সচেতন নয় কারণ XML নেমস্পেসগুলি পরে নির্দিষ্ট করা হয়েছিল। আপনি নেমস্পেসের সাথে মিলিয়ে ডিটিডি ব্যবহার করতে পারেন তবে এটির জন্য কিছু কনডোরেশন প্রয়োজন যেমন ডিটিডি-তে উপসর্গগুলি সংজ্ঞায়িত করতে বাধ্য করা হয় এবং স্বেচ্ছাসেবী উপসর্গগুলি ব্যবহার করতে সক্ষম না হয়ে কেবল সেই উপসর্গগুলি ব্যবহার করা উচিত।
আমার কাছে, অন্যান্য পার্থক্য বেশিরভাগ পৃষ্ঠের are ডেটাটাইপ সমর্থনটি সহজেই ডিটিডিগুলিতে যুক্ত করা যেতে পারে এবং সিনট্যাক্সটি কেবল সিনট্যাক্স। (আমি, একের জন্য, এক্সএমএল স্কিমা সিনট্যাক্সটিকে ভয়াবহ বলে মনে করি এবং কোনও এক্সএমএল স্কিমা হস্তান্তর করতে চাই না, যা আমি ডিটিডি বা রিলাক্স এনজি স্কিমার বিষয়ে বলব না; যদি কোনও কারণে আমার এক্সএমএল স্কিমা প্রয়োজন হয় তবে আমি সাধারণত লিখি একটি রিলাক্স এনজি এবং এটিতে রূপান্তর করুন trang
))
সাদৃশ্য :
ডিটিডি এবং স্কিমাস উভয়ই একই বেসিক ফাংশন সম্পাদন করে:
পার্থক্য:
পাঠ্য-নিবিড় অ্যাপ্লিকেশনগুলির জন্য ডিটিডিগুলি আরও ভাল, যখন ডেটা-নিবিড় কর্মপ্রবাহের জন্য স্কিমার বিভিন্ন সুবিধা রয়েছে।
স্কিমাসগুলি এক্সএমএলে লিখিত হয় এবং ফলস্বরূপ একই নিয়মগুলি অনুসরণ করে, ডিটিডি সম্পূর্ণ ভিন্ন ভাষায় লেখা হয়।
উদাহরণ:
DTD:
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT employees (Efirstname, Elastname, Etitle, Ephone, Eemail)>
<!ELEMENT Efirstname (#PCDATA)>
<!ELEMENT Elastname (#PCDATA)>
<!ELEMENT Etitle (#PCDATA)>
<!ELEMENT Ephone (#PCDATA)>
<!ELEMENT Eemail (#PCDATA)>
XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:od="urn:schemas-microsoft-com:officedata">
<xsd:element name="dataroot">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="employees" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="generated" type="xsd:dateTime"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="employees">
<xsd:annotation>
<xsd:appinfo>
<od:index index-name="PrimaryKey" index-key="Employeeid " primary="yes"
unique="yes" clustered="no"/>
<od:index index-name="Employeeid" index-key="Employeeid " primary="no" unique="no"
clustered="no"/>
</xsd:appinfo>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Elastname" minOccurs="0" od:jetType="text"
od:sqlSType="nvarchar">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="50"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="Etitle" minOccurs="0" od:jetType="text" od:sqlSType="nvarchar">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="50"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="Ephone" minOccurs="0" od:jetType="text"
od:sqlSType="nvarchar">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="50"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="Eemail" minOccurs="0" od:jetType="text"
od:sqlSType="nvarchar">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="50"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="Ephoto" minOccurs="0" od:jetType="text"
od:sqlSType="nvarchar">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="50"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
ডিটিডিতে কেবল দুটি ধরণের ডেটা থাকতে পারে, সিডিএটিএ এবং পিসিডিটিএ। তবে স্কিমাতে আপনি প্রোগ্রামিং ভাষায় যে সমস্ত আদিম ডেটা ব্যবহার করেন তা ব্যবহার করতে পারেন এবং আপনার নিজস্ব কাস্টম ডেটা ধরণের সংজ্ঞা দেওয়ার নমনীয়তা রয়েছে।
স্কিমার বিল্ডিং বিকাশকারী মূল ডেটা ধরণের ভিত্তিতে এবং বিভিন্ন অপারেটর এবং সংশোধক ব্যবহার করে কাস্টম ডেটা প্রকার তৈরি করতে পারেন।
যখন এক্সএমএল প্রথম প্রকাশিত হয়েছিল, আমাদের বলা হয়েছিল এটি আমাদের সমস্ত সমস্যার সমাধান করবে: এক্সএমএল ব্যবহারকারী-বান্ধব, অসীমভাবে এক্সটেনসিবল হবে, শক্ত-টাইপিং এড়ানো হবে এবং কোনও প্রোগ্রামিং দক্ষতার প্রয়োজন হবে না। আমি ডিটিডি সম্পর্কে শিখেছি এবং নিজের এক্সএমএল পার্সার লিখেছি। 15+ বছর পরে, আমি দেখতে পাচ্ছি যে বেশিরভাগ এক্সএমএল ব্যবহারকারী-বান্ধব নয় এবং খুব এক্সটেনসিবল নয় (এর ব্যবহারের উপর নির্ভর করে)। কিছু বুদ্ধিমান ক্লগ এক্সএমএলকে একটি ডাটাবেসে জড়িয়ে ধরার সাথে সাথে আমি জানলাম যে ডেটা টাইপগুলি অবশ্যম্ভাবী। এবং, আপনার উচিত হবে এক্সএসএলটি (রূপান্তর ফাইল) অন্য দিন আমাকে কাজ করতে হয়েছিল। যদি তা প্রোগ্রামিং না হয়, আমি জানি না কী! আজকাল এক্সএমএল ডেটা বা ইন্টারফেস সম্পর্কিত সমস্ত ধরণের সমস্যা খারাপ হয়ে যাওয়া অস্বাভাবিক নয়। আমি এক্সএমএলকে ভালবাসি তবে, এটি তার মূল পরার্থপর সূচনার দিক থেকে অনেক দূরে সরে গেছে।
সংক্ষিপ্ত উত্তর? ডিটিডি এক্সএসডি'র পক্ষে হ্রাস করা হয়েছে কারণ একটি এক্সএসডি আপনাকে আরও নির্ভুলতার সাথে একটি এক্সএমএল কাঠামো সংজ্ঞায়িত করতে দেয়।
একটি ডিটিডি এর উদ্দেশ্য হ'ল এক্সএমএল ডকুমেন্টের গঠন নির্ধারণ করা def এটি আইনি উপাদানগুলির একটি তালিকা সহ কাঠামোটি সংজ্ঞায়িত করে:
<!ATTLIST contact type CDATA #IMPLIED>
<!ELEMENT address1 ( #PCDATA)>
<!ELEMENT city ( #PCDATA)>
<!ELEMENT state ( #PCDATA)>
<!ELEMENT zip ( #PCDATA)>
এক্সএমএল স্কিমা স্কিমা লেখকদের সুনির্দিষ্ট করে তোলে যে উপাদানটির পরিমাণের ডেটা অবশ্যই সংখ্যাসূচক বা আরও নির্দিষ্টভাবে কোনও পূর্ণসংখ্যার হতে হবে। নিম্নলিখিত উদাহরণে আমি ব্যবহার করেছি string
:
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="address1" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="state" type="xs:string"/>
<xs:element name="zip" type="xs:string"/>
</xs:sequence>
</xs:complexType>
ডিটিডিটি অনেকটাই হ্রাস পেয়েছে কারণ এটি স্কিমা ভাষা হিসাবে এর কার্যকারিতা সীমিত, নামস্থান সমর্থন করে না এবং ডেটা টাইপ সমর্থন করে না। তদতিরিক্ত, ডিটিডি সিনট্যাক্সটি বেশ জটিল, এটি বুঝতে এবং বজায় রাখা শক্ত করে তোলে ..
ডিটিডি এক্সএমএল উপাদানটির বাক্য গঠন নির্দেশ করে
এক্সএমএল স্কিমাস এক্সএমএলকে বৈধতা দেওয়ার জন্য মাইক্রোসফ্টের ডিটিডি বিকল্প