Fa:Semi-colon value separator

From OpenStreetMap Wiki
Jump to: navigation, search
زبان‌های موجود — Semi-colon value separator
Afrikaans Alemannisch aragonés asturianu azərbaycanca Bahasa Indonesia Bahasa Melayu Bân-lâm-gú Basa Jawa Baso Minangkabau bosanski brezhoneg català čeština dansk Deutsch eesti English español Esperanto estremeñu euskara français Frysk Gaeilge Gàidhlig galego Hausa hrvatski Igbo interlingua Interlingue isiXhosa isiZulu íslenska italiano Kiswahili Kreyòl ayisyen kréyòl gwadloupéyen kurdî latviešu Lëtzebuergesch lietuvių magyar Malagasy Malti Nederlands Nedersaksies norsk norsk nynorsk occitan Oromoo oʻzbekcha/ўзбекча Plattdüütsch polski português română shqip slovenčina slovenščina Soomaaliga suomi svenska Tiếng Việt Türkçe Vahcuengh vèneto Wolof Yorùbá Zazaki српски / srpski беларуская български қазақша македонски монгол русский тоҷикӣ українська Ελληνικά Հայերեն ქართული नेपाली मराठी हिन्दी অসমীয়া বাংলা ਪੰਜਾਬੀ ગુજરાતી ଓଡ଼ିଆ தமிழ் తెలుగు ಕನ್ನಡ മലയാളം සිංහල ไทย မြန်မာဘာသာ ລາວ ភាសាខ្មែរ ⵜⴰⵎⴰⵣⵉⵖⵜ አማርኛ 한국어 日本語 中文(简体)‎ 吴语 粵語 中文(繁體)‎ ייִדיש עברית اردو العربية پښتو سنڌي فارسی ދިވެހިބަސް
زبان‌های دیگر — در ترجمهٔ ویکی به ما کمک کنید

گاهی اوقات نویسهٔ سِمی‌کالن (semi-colon) یا نقطه‌ویرگول لاتین (یعنی نویسهٔ ;) را در مقدار تگ‌ها به‌کار می‌بریم. این کار زمانی لازم می‌شود که بخواهیم به یک عنصر، یک کلید با چند مقدار بدهیم.

نکتهٔ شایان توجه این که تنها شمار اندکی از نرم‌افزارهای تخصصی مقدارهای چندتایی جداشده با سمی‌کالن را پشتیبانی می‌کنند، تازه آن هم برای چند تگ محدود و نه همهٔ تگ‌ها. بیشتر ابزارهای OSM، پرداختگرهای نقشه (map renderer)،‏ taginfo و XAPI این مقدارها را پشتیبانی نمی‌کنند. برخی از آن‌ها فقط اولین مقدار این سلسلهٔ مقادیر را می‌خوانند اما اکثرشان کل عبارت (یعنی مقدارها و سمی‌کالن‌ها) را یک مقدار تکی در نظر می‌گیرند، بنابراین این مقادیر از نتایج جستجو و خروجی ابزارها می‌افتد و هیچ‌وقت روی نقشه رسم نمی‌شود.

نمونه‌های کاربرد

  • برچسب ref=B500;B550 برای تکه‌ای از راه که دو شمارهٔ رفرنس B500 و B550 را می‌گیرد. این کار را فقط وقتی انجام دهید که یک تکهٔ واحد از راه هر دو مقدار را بگیرد.

توجه: اگر در نقطه‌ای از این تکهٔ راه، یک ref به ref دیگری تغییر می‌کند، این روش، راهِ درست انجام کار نیست. در این حالت باید در آن نقطه یک گره ایجاد کنید و راه را از آنجا به دو نیم تقسیم کنید.

  • برای تعدادی از برچسب‌های «مشخصات»، دادن چند مقدار مناسب است. مثلا هنگام ثبت یک فروشگاه مربوط به خودرو می‌توانید این برچسب را ثبت کنید: service=dealer;tyres;repair. این مورد در صفحهٔ برچسب Tag:shop=car نیز آمده است.
  • برای مقدارهای پیچیده‌ای که نوشتن آن‌ها با زیرکلیدها ممکن نباشد (مخصوصا زمانی که فهرستی نامرتب از اقلام تشکیل بدهند) از سمی‌کالن استفاده می‌کنیم: opening_hours=Tu-Fr 08:00-18:00;Mo 09:00-18:00;Sa 09:00-12:00;closed Aug

چه‌وقت استفاده نکنیم

به‌طور کلی تا حد ممکن از مقادیر جداشده با سمی‌کالن (;) بپرهیزید. اگر راه‌های بهتری برای نمایش اشیا وجود دارد، از این روش استفاده نکنید و برای آن‌ها پیشنهاده ایجاد نکنید. زیرا استفاده از سمی‌کالن به‌عنوان جداکننده با هدف سادگی برای مشارکت‌کنندگان (نقشه‌کش‌ها) و کابران داده‌ها در تضاد است. برای راحتی مشارکت‌کنندگان تازه‌وارد و هر کسی که می‌خواهد از داده‌ها استفاده کند (کسانی که نرم‌افزارهای پرداخت(render) نقشه، جست‌وجوی نقشه، برنامه‌های موبایلی مثل «کافه‌های نزدیک من» و... را تولید می‌کنند) باید تا حد امکان مقدارهایی را که حاوی نویسه‌های خاص هستند کاهش دهیم.

به‌خصوص، باید تا حد ممکن در برچسب‌های «سطح بالا» (یعنی برچسب‌هایی که چیستی یک عنصر را مشخص می‌کنند و مهم هستند) از مقادیر جداشده با سمی‌کالن بپرهیزیم.

در شرایطی که به چندین مقدار نیاز داریم، چند روش جایگزین سمی‌کالن وجود دارد:

  • یکی از مقدارها را انتخاب کنید. مقدار اساسی و چیره را برگزینید و استفاده کنید. مثال: می‌خواهید جایی را ثبت کنید که هم کافه است و هم بستنی‌فروشی. خیلی مفیدتر خواهد بود اگر فقط یکی از برچسب‌های amenity=cafe یا amenity=ice_cream را انتخاب کنید. (برچسب‌های cafe/ice_cream را بررسی کنید و یکی را انتخاب کنید. آیا کافه بودن می‌چربد یا بستنی‌فروشی؟). ثبت آن به‌شکل amenity=cafe;ice_cream اصلا ایدهٔ خوبی نیست.
  • آن عنصر را دو تا کنید. اشیا را به ویژگی‌های مجزا از هم تبدیل کنید و هر کدام را جداگانه به برچسب عادی خودش ثبت کنید. مثال: می‌خواهید کتابخانه‌ای را ثبت کنید که یک کافه هم دارد. یک گره برای کافه ایجاد کنید و تگ مناسب به آن بدهید. یک گره هم برای کتابخانه ایجاد کنید و تگ مناسب به آن بدهید. اگر کتابخانه بزرگ است می‌توانید آن را با یک ناحیه مشخص کنید. ثبت آن به‌شکل amenity=library;cafe اصلا ایدهٔ خوبی نیست.

در هر دو مثال، اگر از سمی‌کالن برای مقدار amenity استفاده کنید، در این صورت این مکان در آن برنامهٔ موبایلی «کافه‌های نزدیک من» نشان داده نمی‌شود، حداقل به این زودی‌ها نشان داده نمی‌شود.

با وجود آنکه تجزیهٔ چنین عبارت‌هایی به‌وسیلهٔ برنامه‌ها کاملا امکان‌پذیر است (یعنی کلمه‌ها را بر اساس نویسهٔ ; از هم تفکیک کنند) اما بیشتر برنامه‌ها این کار را نمی‌کنند.

جزئیات دستوری

افزودن یک فاصله

معمولا مقدارهای جداشده با سمی‌کالن را بدون هیچ‌گونه فاصلهٔ اضافی پشت سر هم می‌نویسیم (مثال: ref=B500;B550)، اما می‌توانیم بعد از هر ; یک فاصله اضافه کنیم (مثال: ref=B500; B550). این کار را مخصوصا هنگام نوشتن ساعت‌های کاری انجام می‌دهیم.

گریز با ';;'

اگر در مقدار یک کلید واقعا خود سمی‌کالن (;) وجود داشته باشد آن را به‌صورت دو تا سمی‌کالن متوالی (;;) بنویسید. این راهکار با اصطلاح نویسهٔ گریز شناخته می‌شود که در برنامه‌نویسی رایانه‌ای و قالب‌بندی داده‌ها استفاده می‌شود (سمی‌کالن اول نقش نویسهٔ گریز را دارد که باعث می‌شود برنامه‌ها سمی‌کالن بعدش را به‌عنوان جداکننده تفسیر نکنند). این وضعیت تقریباً هیچ‌وقت رخ نمی‌دهد، اما برای بی‌پاسخ نماندن کنجکاوی کنجکاوان :) آن را ذکر کردیم. از میان ابزارهای OSM تعداد بسیار اندکی، چنین چیزی را در خودشان پیاده‌سازی کرده‌اند.

جداکننده‌های پیشین

پیش از اینکه بر سر استفاده از سمی‌کالن به‌عنوان جداکننده به توافق برسیم نویسه‌های دیگری نیز پیشنهاد شده بود، شامل: "/" (خط اریب)، " " (فاصله), "-" (خط تیره), and "#" (نماد عدد). سمی‌کالن هم‌اکنون مورد توافق همه است و نرم‌افزار‌های Potlatch و JOSM نیز از آن پشتیبانی می‌کنند. معادل‌های قدیمی را می‌توانیم با سمی‌کالن جایگزین کنیم.

رفتار نرم‌افزارها

ویرایشگرها

  • در Potlatch 1 و Potlatch 2 هنگامی که دو راه تگ‌دار با کلید هم‌نام را ترکیب کنیم، اگر مقدارها متفاوت باشند، به‌طور خودکار با استفاده از سمی‌کالن از هم جدا می‌شوند و زیر یک کلید قرار می‌گیرند. در اکثر مواقع با این کار تگ‌گذاری نادرستی به‌وجود می‌آید و لازم است به‌صورت دستی آن را به یک مقدار تک تغییر دهیم.
  • iD در برخی موارد شما را از ترکیب‌کردن دو عنصر که برای یک کلید مقدارهای متفاوتی دارند باز می‌دارد (مثلا دو راه با تگ highway=*) متفاوت. در برخی دیگر از موارد مقدارها را با استفاده از سمی‌کالن ترکیب می‌کند (مثلا دو مکان با تگ‌های leisure=park و leisure=water_park). البته در این ویرایشگر اگر تگی از قبل وجود داشته باشد و دوباره کلید همان تگ را بنویسیم و مقداری به آن بدهیم، به‌طور خودکار به انتهای نام کلید جدید شمارنده‌هایی به‌صورت _1، _2 و... اضافه می‌شود.
  • در JOSM از کاربر سوال می‌شود و فقط اگر صراحتاً گزینهٔ all را انتخاب کند، مقادیر با استفاده از سمی‌کالن با هم ترکیب می‌شوند.

پرداختگرها (renderers)

  • Mapbox Streets برای هر کدام از برچسب‌های name=* یا name:*=* نویسهٔ ; را با یک em dash ( — ) جایگزین می‌کند. در تگ‌های اصلی مانند amenity=* یا shop=* فقط اولین مقدار را در نظر می‌گیرد و بقیهٔ مقادیر را حذف می‌کند.
  • MapQuest Open هر کدام از مقادیر جداشده با سمی‌کالن در برچسب ref=* را روی یک پلاک جداگانه نمایش می‌دهد.

جایگزین‌ها

اگر می‌خواهید طرح جدیدی ارائه کنید که احتمالا به جداسازی مقادیر با سمی‌کالن نیاز خواهد داشت، پیش از این کار، بررسی کنید که آیا با استفاده از فضای نام قابلیت اجرا دارد. در این شیوه از مقادیر دودویی (بله/خیر) در چندین تگ استفاده می‌شود. مثلاً در یک طرح فرضی برای توصیف انواع کتاب‌ها و اقلامی که در یک کتابخانه ارائه می‌شود، به‌جای اینکه این‌گونه عمل کنیم:

amenity = library
library:stock = books; newspapers; recorded_music

بهتر است که طرحمان را بازنویسی کنیم و مفهوم موردنظرمان را به این شکل بیان کنیم:

amenity = library
library:stock:books = yes
library:stock:newspapers = yes
library:stock:recorded_music = yes

برچسب‌های payment=* و fuel=* مثال‌های خوبی از راهکار دوم هستند.

برچسب‌های دودویی-مقدار (مانند مثال بالا) را می‌توانیم در صورت نیاز بعداً با مقدارهای جدید گسترش دهیم یا حتی زیرفضاهای نام مرتبط و جدید به آن بیفزاییم.

همچنین ببینید