এক্সএমএল স্কিমা কীভাবে গণনা দ্বারা অ্যাট্রিবিউটকে সীমাবদ্ধ করবেন


86

আমার নীচের এক্সএমএল ট্যাগ রয়েছে

<price currency="euros">20000.00</price>

আমি নিম্নলিখিত মুদ্রার বৈশিষ্ট্যটিকে কীভাবে সীমাবদ্ধ করব:

  • ইউরো
  • পাউন্ড
  • ডলার

এবং দাম দ্বিগুণ?

আমি দুজনের মধ্যেই টাইপ করার চেষ্টা করার পরে আমি একটি ত্রুটি পেয়েছি, এখন পর্যন্ত যা পেয়েছি তা এখানে:

<xs:element name="price">
    <xs:complexType>
        <xs:attribute name="currency">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value="pounds" />
                    <xs:enumeration value="euros" />
                    <xs:enumeration value="dollars" />
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
    </xs:complexType>
</xs:element>

4
আপনি যদি এটি করেন তবে আপনার <xs: গুণাবলী> উপাদান থেকে = "xs: স্ট্রিং" টাইপও সরিয়ে ফেলতে হবে। সিম্পল টাইপ বা জটিল টাইপ উপস্থিত থাকলে আপনি টাইপটি দিতে পারবেন না।
সাল

উত্তর:


117

সংখ্যার মানটি আপনার মূল্য সংজ্ঞা থেকে অনুপস্থিত বলে মনে হচ্ছে। নিম্নলিখিত চেষ্টা করুন:

<xs:simpleType name="curr">
  <xs:restriction base="xs:string">
    <xs:enumeration value="pounds" />
    <xs:enumeration value="euros" />
    <xs:enumeration value="dollars" />
  </xs:restriction>
</xs:simpleType>



<xs:element name="price">
        <xs:complexType>
            <xs:extension base="xs:decimal">
              <xs:attribute name="currency" type="curr"/>
            </xs:extension>
        </xs:complexType>
</xs:element>

4
@ কেজুগেসের উত্তর হিসাবে, <xs:extensionসরাসরি শিশু হতে পারে না <xs:complexTypeতবে পরিবর্তে এটি একটি <xs:complexContentবা দ্বারা থাকা আবশ্যক <xs:simpleContent
হ্যাঙ্ককা

22

পুরানো প্রশ্নের নতুন উত্তর

এই পুরানো প্রশ্নের বিদ্যমান উত্তরগুলির মধ্যে কোনওটিই আসল সমস্যাটিকে চিহ্নিত করে না।

আসল সমস্যাটি ছিলএক্সএসডি-তেxs:complexTypeসরাসরিxs:extensionশিশু হিসাবেথাকতে পারে না। সমাধানটিxs:simpleContentপ্রথমেব্যবহার করা। বিশদ অনুসরণ করুন ...


আপনার এক্সএমএল,

<price currency="euros">20000.00</price>

বিরুদ্ধে কার্যকর থাকবে পারেন নিম্নলিখিত সংশোধন XSDs সংখ্যা:

স্থানীয়ভাবে সংজ্ঞাযুক্ত বৈশিষ্ট্য প্রকার

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

  <xs:element name="price">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:decimal">
          <xs:attribute name="currency">
            <xs:simpleType>
              <xs:restriction base="xs:string">
                <xs:enumeration value="pounds" />
                <xs:enumeration value="euros" />
                <xs:enumeration value="dollars" />
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
</xs:schema>

বিশ্বব্যাপী সংজ্ঞায়িত বৈশিষ্ট্য প্রকার

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

  <xs:simpleType name="currencyType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="pounds" />
      <xs:enumeration value="euros" />
      <xs:enumeration value="dollars" />
    </xs:restriction>
  </xs:simpleType>

  <xs:element name="price">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:decimal">
          <xs:attribute name="currency" type="currencyType"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
</xs:schema>

মন্তব্য

  • হিসাবে @Paul দ্বারা মন্তব্য , এই বিষয়বস্তুর প্রকার পরিবর্তন না priceথেকে xs:stringথেকে xs:decimal, কিন্তু এই কঠোরভাবে প্রয়োজন নেই এবং বাস্তব সমস্যা ছিল না।
  • @ ব্যবহারকারী 998692 এর উত্তর অনুসারে , আপনি মুদ্রার সংজ্ঞাটি আলাদা করতে পারবেন এবং আপনি এতে পরিবর্তন করতে পারেন xs:decimal, তবে এটিও আসল সমস্যা ছিল না।

আসল সমস্যাটি ছিল এক্সএসডি-তে xs:complexTypeসরাসরি xs:extensionশিশু হিসাবে থাকতে পারে না ; xs:simpleContentপ্রথম প্রয়োজন।

সম্পর্কিত বিষয় (যা জিজ্ঞাসা করা হয়নি তবে অন্য উত্তরগুলি গুলিয়ে ফেলতে পারে):

priceএটির কোনও বৈশিষ্ট্য রয়েছে কিনা তা কীভাবে সীমাবদ্ধ করা যায়?

এই ক্ষেত্রে, একটি পৃথক, বিশ্ব সংজ্ঞা priceTypeপ্রয়োজন হবে; কেবল স্থানীয় ধরণের সংজ্ঞা দিয়ে এটি করা সম্ভব নয়।

যখন উপাদানটির বৈশিষ্ট্য থাকে তখন কীভাবে উপাদান সামগ্রীকে সীমাবদ্ধ করতে হয়

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

  <xs:simpleType name="priceType">  
    <xs:restriction base="xs:decimal">  
      <xs:minInclusive value="0.00"/>  
      <xs:maxInclusive value="99999.99"/>  
    </xs:restriction>  
  </xs:simpleType>

  <xs:element name="price">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="priceType">
          <xs:attribute name="currency">
            <xs:simpleType>
              <xs:restriction base="xs:string">
                <xs:enumeration value="pounds" />
                <xs:enumeration value="euros" />
                <xs:enumeration value="dollars" />
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
</xs:schema>

8

আপনাকে একটি প্রকার তৈরি করতে হবে এবং সেই ধরণের বৈশিষ্ট্য তৈরি করতে হবে:

<xs:simpleType name="curr">
  <xs:restriction base="xs:string">
    <xs:enumeration value="pounds" />
    <xs:enumeration value="euros" />
    <xs:enumeration value="dollars" />
  </xs:restriction>
</xs:simpleType>

তারপরে:

<xs:complexType>
    <xs:attribute name="currency" type="curr"/>
</xs:complexType>

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

-2
<xs:element name="price" type="decimal">
<xs:attribute name="currency" type="xs:string" value="(euros|pounds|dollars)" /> 
</element> 

এটি সম্পূর্ণরূপে গণনার প্রয়োজনীয়তা দূর করবে। আপনি প্রয়োজনে ডাবল টাইপ পরিবর্তন করতে পারে।


@valueউপস্থিত হতে পারে না xs:attributexs:attributeসন্তানের হিসাবে উপস্থিত হতে পারে না xs:element। প্রয়োজনীয় xs:নেমস্পেস উপসর্গগুলি বাদ দেওয়া হয়েছে। এই উত্তরটি একটি গণ্ডগোল।
kjhughes
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.