এক্সএসডি-তে এলিমেন্টফর্মডেফল্ট কী করে?


92

কী করে elementFormDefaultএবং কখন এটি ব্যবহার করা উচিত?

সুতরাং আমি elementFormDefaultমানগুলির জন্য কিছু সংজ্ঞা পেয়েছি :

যোগ্য - উপাদান এবং বৈশিষ্ট্যগুলি স্কিমার টার্গেটনামস্পেসে রয়েছে

অযোগ্য - উপাদান এবং গুণাবলীর নাম স্থান নেই

সুতরাং সেই সংজ্ঞা থেকে আমি ভাবব যে যদি কোনও স্কিমাটি যোগ্যতে সেট করা থাকে তবে আপনাকে নামপথের সাথে প্রকারটি কেন উপস্থাপন করতে হবে? এবং এমন পরিস্থিতিতে কী কী আছে যেগুলি আপনি এমনকি এই বিষয়টির জন্য অযোগ্য ঘোষণা করেছেন? আমি গুগলিংয়ের চেষ্টা করেছি, তবে আমার কাছে যা কিছু পেয়েছিল তা হ'ল দু'টি ডাব্লু 3 সি পৃষ্ঠা যা বুঝতে খুব চেনা।

এই মুহুর্তে আমি যে ফাইলটি নিয়ে কাজ করছি এটিই, কেন আমি target:TypeAssignmentsযখন টাইপটি targetNamespaceএকই হিসাবে ঘোষণা করি তখন ধরণের ঘোষণার দরকার হয় কেন xmlns:target?

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:target="http://www.levijackson.net/web340/ns"
        targetNamespace="http://www.levijackson.net/web340/ns" 
        elementFormDefault="qualified">
  <element name="assignments">
    <complexType>
      <sequence>
        <element name="assignments" type="target:TypeAssignments"
                 minOccurs="1" maxOccurs="unbounded"/>
      </sequence>
    </complexType>
  </element>
  <complexType name="TypeAssignments">
    <sequence>
      <element name="assignment" type="target:assignmentInfo"
               minOccurs="0" maxOccurs="unbounded"/>
    </sequence>
  </complexType>
  <complexType name="assignmentInfo">
    <sequence>
      <element name="name" type="string"/>
      <element name="page" type="target:TypePage"/>
      <element name="file" type="target:TypeFile" 
               minOccurs="0" maxOccurs="unbounded"/>
    </sequence>
    <attribute name="id" type="string" use="required"/>
  </complexType>
  <simpleType name="TypePage">
    <restriction base="integer">
      <minInclusive value="50" />
      <maxInclusive value="498" />
    </restriction>
  </simpleType>
  <simpleType name="TypeFile">
    <restriction base="string">
      <enumeration value=".xml" />
      <enumeration value=".dtd" />
      <enumeration value=".xsd" />
    </restriction>
  </simpleType>
</schema>

উত্তর:


73

এলিমেন্টফর্মডেফল্টের স্কিমার ধরণের নামগুলির সাথে কোনও সম্পর্ক নেই, এটি এক্সএমএল ডকুমেন্টের উপাদানগুলির নামস্থানগুলি সম্পর্কে যা স্কিমা মেনে চলে।

এখানে অনুমানের সুস্পষ্ট অংশটি রয়েছে:

Element Declaration Schema

Component Property  {target namespace}
Representation      If form is present and its ·actual value· is qualified, 
                    or if form is absent and the ·actual value· of 
                    elementFormDefault on the <schema> ancestor is qualified, 
                    then the ·actual value· of the targetNamespace [attribute]
                    of the parent <schema> element information item, or 
                    ·absent· if there is none, otherwise ·absent·.

এর অর্থ হ'ল আপনি যে স্ক্রিমার শীর্ষে ঘোষিত টার্গেটনামস্পেসটি কেবলমাত্র স্কিমা অনুবর্তী এক্সএমএল ডকুমেন্টের উপাদানগুলিতে প্রযোজ্য যদি এলিমেন্টফর্মডাফল্ট "যোগ্য" হয় বা উপাদানটি স্পষ্টভাবে ঘোষিত হয় ফর্ম = "যোগ্য" হিসাবে ।

উদাহরণস্বরূপ: যদি এলার্মফর্মডিফল্ট অযোগ্য হয় -

<element name="name" type="string" form="qualified"></element>
<element name="page" type="target:TypePage"></element>

"নাম" উপাদানগুলি টার্গেটনামস্পেসে এবং "পৃষ্ঠা" উপাদানগুলি নাল নেমস্পেসে থাকার প্রত্যাশা করবে।

আপনাকে প্রতিটি উপাদান ঘোষণায় ফর্ম = "যোগ্য" রাখার জন্য অ্যালার্মফর্মডেফল্ট = "কোয়ালিফাইড" উল্লেখ করে টার্গেটনামস্পেসটি এলিমেন্ট ডিক্লেয়ারেশনে ফর্ম = "অযোগ্য" না রেখে ওভাররাইড না করা হলে প্রতিটি এলিমেন্টের জন্য প্রযোজ্য।


যদিও এই উত্তরটি নির্দিষ্ট করে বলে এটি এটি সঠিকভাবে ব্যাখ্যা করে না। স্থানীয়ভাবে সংজ্ঞায়িত উপাদানগুলি এখনও টার্গেটনামস্পেসে থাকে এবং শূন্য নেমস্পেসে কখনও হয় না। এলিমেন্টফর্মডেফল্ট হ'ল একটি স্যুইচ যা আপনার উদাহরণস্বরূপ নেমস্পেসের যোগ্যতা অর্জন করবে কিনা তা নির্দিষ্ট করে।
ইন্দেউকা

4
@ তিনি, এটি সঠিক নয়: বা যে কোনও মূল্যেই, মানুষকে বিভ্রান্ত করার জন্য এটি দায়বদ্ধ। যদি কোনও স্থানীয় উপাদান ঘোষণায় ফর্ম = যোগ্যতা না থাকে, তবে উপাদান ঘোষণার স্কিমা উপাদানটির {টার্গেট নেমস্পেস} সম্পত্তিটি "অনুপস্থিত" এবং এর অর্থ এলিমেন্টের নামের স্থান ইউআরআই সম্পত্তিটিও "অনুপস্থিত" থাকতে হবে
মাইকেল কে

@ মিশেলকে আমার কাছে এটি আরও বিভ্রান্তিকর। প্রশ্নটি উদাহরণ পৃষ্ঠায় নাল নেমস্পেসে রয়েছে কি না, কারণ যদি এটি হয় তবে এই অনুমানটি কেবল এলার্মফর্মডেফল্ট সেট করে না বলে = অযোগ্যকে স্থানীয়ভাবে সংজ্ঞায়িত উপাদানগুলি নাল নেমস্পেসে রাখে। পৃষ্ঠাটি বলার অপেক্ষা রাখে না যে পৃষ্ঠায় নামস্থান যোগ্য হওয়া উচিত নয়, কারণ পৃষ্ঠাটি বলার মতো কোনও নামস্থান নেই কারণ এটি অনুমান করা সহজভাবে তা বলে না এবং কেন একটি টার্গেটনামস্পেস যাচাই না করে যাচাই করে name নামস্থানে?
ইহে ওনওয়ুকা

4
এটি "সহজভাবে এটি বলে না" কারণ আপনি এটিকে খুব অনানুষ্ঠানিকভাবে বর্ণনা করছেন: "নাল নেমস্পেসে একটি উপাদান স্থাপন করা" শব্দটি এক্সএসডি স্পেসিফিকেশনের পরিভাষা ব্যবহার করছে না; বৈশিষ্টটি আরও বেশি সাবধানে পরিভাষা ব্যবহার করতে পছন্দ করে, যা প্রায়শই এটি পড়া শক্ত করে তবে শেষ হয় আরও অনেক সুনির্দিষ্ট।
মাইকেল কে

4
যতদূর আমি উদ্বিগ্ন, লিখিত হিসাবে এটি একটি সঠিক উত্তর।
মাইকেল কে

61

উপাদান AuthorTypeদ্বারা ব্যবহৃত নিম্নলিখিত কমপ্লেক্সটাইপ বিবেচনা করুনauthor

<xsd:complexType name="AuthorType">
  <!-- compositor goes here -->
  <xsd:sequence>
     <xsd:element name="name" type="xsd:string"/>
     <xsd:element name="phone" type="tns:Phone"/>
  </xsd:sequence>
  <xsd:attribute name="id" type="tns:AuthorId"/>
</xsd:complexType>
<xsd:element name="author" type="tns:AuthorType"/>

যদি elementFormDefault="unqualified"

তারপরে এক্সএমএল ইনস্ট্যান্সটি বৈধ

<x:author xmlns:x="http://example.org/publishing">
   <name>Aaron Skonnard</name>
   <phone>(801)390-4552</phone>
</x:author>

নামের স্থানটি (অযোগ্য) নির্দিষ্ট না করেই লেখকের নাম বৈশিষ্ট্য অনুমোদিত। যে উপাদানগুলির একটি অংশ <xsd:complexType>সেগুলি জটিল থেকে টাইপ হিসাবে স্থানীয় হিসাবে বিবেচিত হয়।

যদি elementFormDefault="qualified"

তারপরে উদাহরণটির স্থানীয় উপাদানগুলি যোগ্য হওয়া উচিত

<x:author xmlns:x="http://example.org/publishing">
   <x:name>Aaron Skonnard</name>
   <x:phone>(801)390-4552</phone>
</x:author>

আরও তথ্যের জন্য দয়া করে এই লিঙ্কটি দেখুন


56

একটি পুরানো, প্রায়শই জিজ্ঞাসিত প্রশ্নের নতুন, বিস্তারিত উত্তর এবং ব্যাখ্যা ...

সংক্ষিপ্ত উত্তর : আপনি যদি যোগ elementFormDefault="qualified"না করেন xsd:schema, তবে ডিফল্ট unqualifiedমানটির অর্থ স্থানীয়ভাবে ঘোষিত উপাদানগুলির কোনও নামস্থান নেই

যা elementFormDefaultকরে তা নিয়ে প্রচুর বিভ্রান্তি রয়েছে , তবে একটি সংক্ষিপ্ত উদাহরণ দিয়ে এটি দ্রুত ব্যাখ্যা করা যেতে পারে ...

আপনার এক্সএসডি এর প্রবাহিত সংস্করণ:

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:target="http://www.levijackson.net/web340/ns"
        targetNamespace="http://www.levijackson.net/web340/ns">
  <element name="assignments">
    <complexType>
      <sequence>
        <element name="assignment" type="target:assignmentInfo" 
                 minOccurs="1" maxOccurs="unbounded"/>
      </sequence>
    </complexType>
  </element>
  <complexType name="assignmentInfo">
    <sequence>
      <element name="name" type="string"/>
    </sequence>
    <attribute name="id" type="string" use="required"/>
  </complexType>
</schema>

গুরুত্বপূর্ণ দিক:

  • assignmentউপাদান স্থানীয়ভাবে সংজ্ঞায়িত করা হয়।
  • এক্সএসডি-তে স্থানীয়ভাবে সংজ্ঞায়িত উপাদানগুলি ডিফল্টরূপে কোনও নেমস্পেসে নেই।
    • এর কারণ হল ডিফল্ট মান elementFormDefaultহল unqualified
    • এটি যুক্তিযুক্তভাবে এক্সএসডি এর নির্মাতাদের একটি ডিজাইনের ভুল।
    • স্ট্যান্ডার্ড অনুশীলন সবসময় ব্যবহার করা elementFormDefault="qualified" যাতে assignmentলক্ষ্য নামস্থানে হিসাবে এক আশা করবে।
  • এটি ঘোষণার ক্ষেত্রে খুব কম ব্যবহৃত formবৈশিষ্ট্য xs:elementযা এর জন্য elementFormDefaultডিফল্ট মানগুলি প্রতিষ্ঠা করে।

আপাতদৃষ্টিতে বৈধ এক্সএমএল

এই এক্সএমএলটিকে উপরের এক্সএসডি অনুযায়ী বৈধ হওয়া উচিত বলে মনে হচ্ছে:

<assignments xmlns="http://www.levijackson.net/web340/ns"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://www.levijackson.net/web340/ns try.xsd">
  <assignment id="a1">
    <name>John</name>
  </assignment>
</assignments>

বিজ্ঞপ্তি:

  • ডিফল্ট নেমস্পেস ( ) এ assignmentsস্থান assignmentsএবং এর সমস্ত বংশধরদের ডিফল্ট নেমস্পেস http://www.levijackson.net/web340/ns

বিভ্রান্তিকর বৈধতা ত্রুটি

বৈধ দেখাচ্ছে সত্ত্বেও, উপরের এক্সএমএলটি নিম্নলিখিত বিভ্রান্তিকর বৈধতা ত্রুটিটি প্রদান করে:

[ত্রুটি] চেষ্টা করুন। এক্সএমএল: 4: 23: সিভিসি-জটিল-টাইপ .2.4.a: অবৈধ সামগ্রী 'অ্যাসাইনমেন্ট' দিয়ে শুরু হয়েছিল। 'Ment কার্য।' এর মধ্যে একটি প্রত্যাশিত।

মন্তব্য:

  • আপনি এই ডায়গনিস্টিককে অভিশাপ দেওয়ার জন্য প্রথম বিকাশকারী হবেন না যা বলে মনে হচ্ছে যে বিষয়বস্তুটি অবৈধ কারণ এটি কোনও assignmentউপাদান খুঁজে পাওয়ার আশা করেছিল তবে এটি আসলে একটি assignmentউপাদান খুঁজে পেয়েছিল । ( ডাব্লুটিএফ )
  • এর সত্যিকারের অর্থ: চারপাশে {এবং এর অর্থ হ'ল বৈধকরণ এখানে কোনও নেমস্পেসে প্রত্যাশা করেছিল । দুর্ভাগ্যক্রমে, যখন এটি বলে যে এটি একটি উপাদান খুঁজে পেয়েছে, তখন এটি উল্লেখ করে না যে এটি এটি একটি ডিফল্ট নেমস্পেসে পাওয়া গেছে যা কোনও নেমস্পেসের থেকে পৃথক।}assignmentassignment assignment

সমাধান

  • সময় বেশীরভাগ: যোগ elementFormDefault="qualified"করার xsd:schemaXSD এর উপাদান। এর অর্থ বৈধ এক্সএমএলকে যখন স্থানীয়ভাবে এক্সএসডি-তে ঘোষণা করা হয় তখন লক্ষ্য নেমস্পেসে উপাদান রাখতে হবে; অন্যথায়, বৈধ এক্সএমএলকে অবশ্যই স্থানীয়ভাবে ঘোষিত উপাদানগুলি কোনও নেমস্পেসে রাখতে হবে।
  • সময়ের সংখ্যালঘু সংখ্যালঘু: এক্সএসডি-র প্রয়োজনীয়তা যে assignmentকোনও নামস্থানের মধ্যে না মেনে এক্সএমএল পরিবর্তন করুন । উদাহরণস্বরূপ, উপাদানটিতে যুক্ত xmlns=""করে এটি অর্জন করা যায় assignment

ক্রেডিটস: এই উত্তর সম্পর্কে সহায়ক প্রতিক্রিয়া জন্য মাইকেল কে ধন্যবাদ ।


12

এলিমেন্টফর্মডিফল্টের সাথে লক্ষণীয় গুরুত্বপূর্ণ হ'ল এটি স্থানীয়ভাবে সংজ্ঞায়িত উপাদানগুলিতে প্রয়োগ হয় , সাধারণত একটি জটিল টাইপ ব্লকের অভ্যন্তরে নামকরণ করা উপাদানগুলির জন্য, স্কিমার শীর্ষ স্তরের সংজ্ঞায়িত বৈশ্বিক উপাদানগুলির বিপরীতে। এলিমেন্টফর্মডেফল্ট = "যোগ্য" এর সাহায্যে আপনি স্কিমার টার্গেট নেমস্পেসটি নথির ডিফল্ট নেমস্পেস হিসাবে এক্সএমএল ডকুমেন্টের মধ্যে থেকে স্কিমায় স্থানীয় উপাদানগুলিকে সম্বোধন করতে পারেন।

অনুশীলনে, নেস্টেড ব্লকগুলিতে উপাদানগুলি ঘোষণা করতে সক্ষম হতে এলিমেন্টফর্মডেফল্ট = "যোগ্য" ব্যবহার করুন, অন্যথায় আপনাকে শীর্ষ স্তরের সমস্ত উপাদান ঘোষণা করতে হবে এবং রেফ বৈশিষ্ট্যটি ব্যবহার করে নেস্টেড উপাদানগুলিতে স্কিমায় তাদের উল্লেখ করতে হবে, ফলস্বরূপ ফলস্বরূপ কম কমপ্যাক্ট স্কিমা।

এক্সএমএল স্কিমা প্রাইমার এই বিটটি এটি সম্পর্কে কথা বলে: http://www.w3.org/TR/xmlschema-0/#NS


সবচেয়ে নির্ভুল উত্তরের মতো দেখতে কিছুটা ব্যাখ্যা। এলিমেন্টফর্মডেফল্ট সহ = যোগ্যতার সাথে আপনার অবশ্যই স্থানীয় স্পেসিফিক স্থানীয় উপাদানের যোগ্যতা রাখতে হবে। এটি অযোগ্য হিসাবে সেট হয়ে গেলে আপনাকে অবশ্যই তাদের যোগ্যতার জন্য নেমস্পেস করা উচিত নয়।
ইহে ওনওয়ুকা

6

এলিমেন্টফর্মডেফল্ট = "কোয়ালিফাইড" স্কিমা ডকুমেন্ট নিজেই (.xsd ফাইল) এর নেমস্পেসের পরিবর্তে এক্সএমএল দস্তাবেজ (.xML ফাইল) এ নেমস্পেসের ব্যবহার নিয়ন্ত্রণ করতে ব্যবহৃত হয়।

এলার্মফর্মডাফল্ট = "যোগ্য" নির্দিষ্ট করে আমরা এই স্কিমার সাথে বৈধতাযুক্ত নথিগুলিতে ব্যবহারের জন্য নেমস্পেসের ঘোষণাটি প্রয়োগ করি।

উপাদানগুলি অযোগ্য হওয়ার চেয়ে যোগ্য হওয়া উচিত তা ঘোষণা করার জন্য এই মানটি নির্দিষ্ট করা সাধারণ অনুশীলন। তবে, যেহেতু অ্যাট্রিবিউটফর্মডেফল্ট = "অযোগ্য" হ'ল এটি ডিফল্ট মান, সুতরাং যদি কেউ নাম স্থানটি যোগ্যতা অর্জন করতে না চান তবে এটি স্কিমা নথিতে নির্দিষ্ট করার দরকার নেই।


এলিমেন্টফর্মডেফল্ট কেবল স্থানীয়ভাবে সংজ্ঞায়িত উপাদানগুলিতে প্রয়োগ হয়। বিশ্বব্যাপী উপাদানগুলি নির্বিশেষে নামগতির যোগ্য হতে হবে।
ইন্দেউকা

0

আমি লক্ষ করেছি যে এক্সএমএলএসপিএল (কমপক্ষে ২০১১ সংস্করণ) এর একটি লক্ষ্যনামস্পেস সংজ্ঞায়িত করা দরকার যদি এলিমেন্টফর্মডেফল্ট = "যোগ্য" ব্যবহার করা হয়। অন্যথায় বৈধতা দেওয়া হবে না। এবং নেমস্পেস উপসর্গ সহ xmls জেনারেট করে না

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