একটি বৈধ এক্সএমএল ফাইলের কোনও এক্সএমএল ঘোষণার প্রয়োজন?


122

আমি সের্স পার্সার অফ জেরেস ব্যবহার করে একটি এক্সএমএল ফাইল পার্স করছি।
এক্সএমএল ঘোষণা কি <?xml version="1.0" encoding="UTF-8"?>প্রয়োজনীয়?


3
বৈধ এবং সুসংহত দলিলগুলির মধ্যে পার্থক্য রয়েছে। আপনি কোনটি বোঝাতে চান?
ফেলিক্স ক্লিং

আমি প্রোলগ ত্রুটি / অবৈধ utf-8 এনকোডিংটি পাচ্ছি। তারপরে আমি এক্সএমএল ফাইলটিতে বিওএমকে পেয়েছি যা ব্যবহারকারী নোটপ্যাড ব্যবহার করে ফাইলটি খোলেন (আমি এটি এড়াতে পারি না)। আমি নিশ্চিত নই যে আমি একটি বৈধ বা সুগঠিত নথিগুলি উল্লেখ করছি। কেবল ত্রুটিগুলি এড়ানো দরকার কারণ আমি একটি ফাংশন তৈরি করছি যা "<" এর আগে সমস্ত বাইট সরিয়ে দেয়। যা আমাকে এটি নিশ্চিত করতে হবে যে এক্সএমএল শিরোনামের ঘোষণা দরকার। তোমরা কি মনে কর?
ইরোস

বিওএম সরানোর কোনও জাভা ক্লাস আছে কি? বা এক্সএমএল ফাইল থেকে কয়েক বাইট? ইনপুটস্ট্রিম থেকে আমি ফিলিটারপুট স্ট্রিম এবং পুশব্যাক ইনপুট স্ট্রিম থেকে বাদ দেওয়ার পদ্ধতি সম্পর্কে ভাবছি তবে কীভাবে এটি ব্যবহার করবেন সে সম্পর্কে ধারণা নেই।
ইরোস

@ অ্যারোস: " আমি নিশ্চিত নই যে আমি একটি বৈধ বা সুসংহত দলিলগুলি উল্লেখ করছি " পার্থক্যটির সংক্ষিপ্ত ব্যাখ্যার জন্য সুসংহত বনাম ভ্যালিড এক্সএমএল দেখুন ।
kjhughes

উত্তর:


184

এক্সএমএল 1.0 এ, এক্সএমএল ঘোষণাটি is চ্ছিকএক্সএমএল 1.0 সুপারিশের বিভাগ 2.8 দেখুন , যেখানে এটি বলে যে এটি "ব্যবহার করা উচিত" - যার অর্থ এটি প্রস্তাবিত, তবে বাধ্যতামূলক নয়। এক্সএমএল ১.১ এ তবে ঘোষণাটি বাধ্যতামূলকএক্সএমএল 1.1 সুপারিশের বিভাগ 2.8 দেখুন , যেখানে এটি বলেছে "আবশ্যক" ব্যবহার করা উচিত। এটি এমনকি রাষ্ট্রের যায় যে যদি ঘোষণা অনুপস্থিত, যা স্বয়ংক্রিয়ভাবে বোঝা ডকুমেন্ট একটি XML 1.0 নথি।

লক্ষ্য করুন একটি ইন এক্সএমএল ঘোষণাencoding এবং standaloneউভয় ঐচ্ছিক। কেবল versionবাধ্যতামূলক। এছাড়াও, এগুলি কোনও বৈশিষ্ট্য নয়, সুতরাং যদি তারা উপস্থিত থাকে তবে অবশ্যই সেগুলি অবশ্যই এই ক্রমে থাকতে হবে: versionতারপরে যেকোনও encodingঅনুসরণ করা হবে standalone

<?xml version="1.0"?>
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" standalone="yes"?>
<?xml version="1.0" encoding="UTF-16" standalone="yes"?>

আপনি যদি এইভাবে এনকোডিং নির্দিষ্ট না করেন তবে এক্সএমএল পার্সাররা কী এনকোডিংটি ব্যবহার হচ্ছে তা অনুমান করার চেষ্টা করে। এক্সএমএল ১.০ প্রস্তাবনাটি এমন একটি সম্ভাব্য উপায় বর্ণনা করে যাতে চরিত্রের এনকোডিংটি স্বয়ংক্রিয়ভাবে আবিষ্কার করা যায় । বাস্তবে, ইনপুটটি ইউটিএফ -8, ইউটিএফ -16 বা ইউএস-এএসসিআইআই হিসাবে এনকোড করা থাকলে এটি খুব বেশি সমস্যা হয় না। 8-বিট এনকোডিংগুলির সাথে মুখোমুখি হলে স্বয়ংক্রিয়ায়ন কাজ করে না যখন ইউএস-এএসসিআইআই রেঞ্জের (যেমন আইএসও 8859-1) অক্ষর ব্যবহার করে - আপনি যদি পারেন তবে এগুলি তৈরি করা এড়ান।

standaloneইঙ্গিত কিনা XML দস্তাবেজে সঠিকভাবে DTD ছাড়া বা না প্রসেস করা যাবে। মানুষ খুব কমই এটি ব্যবহার করে। এই দিনগুলিতে এটি একটি এক্সএমএল ফর্ম্যাট ডিজাইন করা খারাপ যা এটির ডিটিডি ছাড়াই তথ্য হারিয়েছে।

হালনাগাদ:

একটি "প্রোলোগ ত্রুটি / অবৈধ utf-8 এনকোডিং" ত্রুটিটি নির্দেশ করে যে ফাইলের মধ্যে থাকা পার্সারটি পাওয়া প্রকৃত ডেটা এনকোডিংয়ের সাথে মেলে না যেটি এক্সএমএল ঘোষণাটি বলে। বা কিছু ক্ষেত্রে ফাইলের অভ্যন্তরের ডেটা স্বয়ংক্রিয় অনুসন্ধানকৃত এনকোডিংয়ের সাথে মেলে না।

যেহেতু আপনার ফাইলে একটি বাইট-অর্ডার-চিহ্ন (বিওএম) রয়েছে এটি ইউটিএফ -16 এনকোডিংয়ে থাকা উচিত। আমার সন্দেহ হয় যে <?xml version="1.0" encoding="UTF-8"?>নোটপ্যাডের মাধ্যমে ফাইলটি ইউটিএফ -16 এ পরিবর্তিত হয়ে যাওয়ার পরে আপনার ঘোষণাপত্রটি যা স্পষ্টতই ভুল বলেছে । সহজ সমাধানটি হ'ল সরানো encodingএবং সহজভাবে বলা <?xml version="1.0"?>। আপনি এটি বলতে এডিটও করতে পারেন encoding="UTF-16"তবে এটি মূল ফাইলের (যা ইউটিএফ -16 এ ছিল না) ভুল হবে বা যদি ফাইলটি কোনওভাবে ইউটিএফ -8 বা অন্য কোনও এনকোডিংয়ে ফিরে আসে।

বিওএম সরিয়ে দেওয়ার চেষ্টা করে বিরক্ত করবেন না - এটি সমস্যার কারণ নয়। এক্সএমএল সম্পাদনা করতে নোটপ্যাড বা ওয়ার্ডপ্যাড ব্যবহার করা আসল সমস্যা!


আমার প্রশ্নের উত্তর দেওয়া হয়েছিল কিন্তু আমার অনুসরণের প্রশ্নটি ছিল না। এর জন্য আমার কি আর একটি প্রশ্ন তৈরি করা দরকার? বা দয়া করে এটি এখানে যুক্ত করুন।
ইরোস

5
বিওএম সমস্যার কারণ হতে পারে। কিছু পুরানো এক্সএমএল পার্সার ইউটিএফ -8 নথিটি শুরুর সময় কোনও বিওএম গ্রহণ করবে না (এটি ইউটিএফ -16 এর জন্য ডিজাইন করা হয়েছিল, এবং কেবল ইউটিএফ -8 এর সাথে পরে গ্রহণযোগ্য হয়েছিল)। তবে আপনি যদি জেরেসের সাম্প্রতিক সংস্করণটি ব্যবহার করেন তবে সমস্যা হওয়ার সম্ভাবনা নেই।
মাইকেল কে

আরও মনে রাখবেন, নোটপ্যাডের "হিসাবে সংরক্ষণ করুন" কথোপকথনে আপনি আপনার এক্সএমএল হিসাবে সংরক্ষণ করতে কোন এনকোডিংটি চয়ন করতে পারেন। আপনি যদি বিওএম অপসারণ করতে চান তবে কেবল "ASCII" হিসাবে সংরক্ষণ করুন (ধরে নিবেন আপনি কোনও ইউনিকোড অক্ষর ব্যবহার করছেন না)। নিম্ন 127 টি অক্ষরের জন্য, ASCII এবং UTF-8 অভিন্ন।
BrainSlugs83

8

এক্সএমএল ঘোষণা alচ্ছিক তাই আপনার এক্সএমএলটি এটি ব্যতীত সু-গঠনযুক্ত। তবে এটি ব্যবহার করার পরামর্শ দেওয়া হয় যাতে পার্সারদের দ্বারা বিশেষত ব্যবহৃত এনকোডিং সম্পর্কে ভুল অনুমানগুলি তৈরি না হয়।


3
আমি কি কেবলমাত্র এটিই উদ্ভট বলে মনে করি যে আপনি এক্সএমএল পার্সারদের বলছেন যে তারা ইতিমধ্যে আপনার নথিটি ডিকোডিং শুরু করার পরে কী এনকোডিং ব্যবহার করবেন? আমি স্পষ্টভাবে বলতে চাইছি, যদি এটি সেই ট্যাগটিকে বিশ্লেষণ করতে এবং এটি কী বলে তা বুঝতে পারে তবে এটি ইতিমধ্যে সঠিক এনকোডিংটি বের করেছে। আমি এনকোডিং বৈশিষ্ট্যের জন্য কোনও বৈধ ব্যবহারের কথা ভাবতে পারি না।
BrainSlugs83

2
@ BrainSlugs83 কোনও বিওএম-তে এনকোডিংটি 8-বিট হিসাবে নির্দিষ্ট করা হয়নি। সুতরাং হয় এএসসিআইআই বা ইউটিএফ -8 বা তাদের কোনও পুরানো 8-বিট জাতীয় এনকোডিং। এক্সএমএল ঘোষণা সমস্ত নিম্ন অর্ধেক 8-বিট, যা সমস্ত এনকোডিংগুলির মধ্যে সমান এবং উপরের অর্ধেকটি চয়ন করতে পর্যাপ্ত ইনফ্রোমেশন সরবরাহ করে ve ডিজাইনের সেরা নয়, তবে সিপি 1241 এবং সিপি 866 এর মধ্যে অনুমান করার চেয়ে এখনও পুরানো দিনগুলির পাঠ্য ফাইলগুলির জন্য সাধারণ ছিল।
ইউজিন রায়বটসেভ

তবে তাদের পরিষ্কার হওয়া উচিত এবং এক্সএমএলটি ইউটিএফ -8 - গল্পের শেষ বলে।
লোথার

3

এটি কেবল তখনই প্রয়োজন যখন আপনি ডিফল্ট মানগুলি ব্যবহার করেন না versionএবং encoding(যা আপনি সেই উদাহরণটিতে রয়েছেন )।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.