زبان ها

این یک ترجمه است. ممکن است حاوی خطا باشد یا با توجه به نسخه انگلیسی از تاریخ خارج شود. مترجم: Alex White

نحوه اضافه کردن استایل به XML

توصیه CSS2 شامل یک آموزش مختصر در مورد استفاده از CSS با XML است (به بند 2.2 مراجعه کنید). در زمانی که CSS2 نوشته شد، مشخصات رسمی سبک در XML آماده نبود. در اینجا چیزی است که آن آموزش باید حاوی آن باشد. توجه داشته باشید که نمونه ها از CSS استفاده می کنند، اما در بیشتر موارد قوانین سبک را می توان در XSL نیز نوشت.

شیوه نامه های خارجی

Tip: آن را در مرورگر خود امتحان کنید

HTML یک عنصر پیوند برای پیوند به شیوه نامه های خارجی دارد، اما هر قالب مبتنی بر XML چنین عنصری را نخواهد داشت. اگر عنصر مناسبی وجود ندارد، همچنان می‌توانید شیت‌های سبک خارجی را با استفاده از دستورالعمل پردازش xml-stylesheet به این صورت وصل کنید:

<?xml-stylesheet href="my-style.css"?>
... rest of document here...

این دستورالعمل پردازش (PI) باید قبل از اولین تگ سند باشد. type="text/css" مورد نیاز نیست، اما به مرورگر کمک می کند: اگر از CSS پشتیبانی نمی کند، می داند که مجبور نیست این فایل را دانلود کند.

درست مانند عنصر پیوند HTML می‌تواند چندین PI با xml-stylesheet وجود داشته باشد و آنها می‌توانند ویژگی‌هایی برای تنظیم نوع، رسانه و عنوان داشته باشند.

مثال

در اینجا یک مثال بزرگتر است. بیایید فرض کنیم سه شیوه نامه داریم. دو مورد آخر جایگزین یکدیگر هستند و خواننده سند ممکن است انتخاب کند که از کدام یک استفاده کند. به جز زمانی که سند چاپ می شود که در این صورت فقط می خواهیم از آخرین استایل استفاده کنیم. اینجاست common style sheet:

/* common.css */
INSTRUMENT { display: inline }
ARTICLE, HEADLINE, AUTHOR,
PARA { display: block }

این یکی از سبک های جایگزین است، در فایلی به نام “modern.css”:

ARTICLE { font-family: sans-serif;
  background: white; color: black }
AUTHOR { margin: 1em; color: red }
HEADLINE { text-align: right;
  margin-bottom: 2em }
PARA { line-height: 1.5;
  margin-left: 15% }
INSTRUMENT { color: blue }

و در اینجا یکی دیگر است، به نام “classic.css”:

ARTICLE { font-family: serif;
  background: white; color: #003 }
AUTHOR { font-size: large;
  margin: 1em 0 }
HEADLINE { font-size: x-large;
  margin-bottom: 1em }
PARA { text-indent: 1em;
  text-align: justify }
INSTRUMENT { font-style: italic }

سند XML با این سه شیوه نامه مرتبط به آن به شکل زیر است:

<?xml-stylesheet href="common.css"?>
<?xml-stylesheet href="modern.css"
  title="Modern" media="screen"
  type="text/css"?>
<?xml-stylesheet href="classic.css"
  alternate="yes" title="Classic"
  media="screen, print" type="text/css"?>
<ARTICLE>
  <HEADLINE>Fredrick the Great meets
    Bach</HEADLINE>
  <AUTHOR>Johann Nikolaus Forkel</AUTHOR>
  <PARA>
    One evening, just as he was
    getting his
    <INSTRUMENT>flute</INSTRUMENT>
    ready and his musicians were
    assembled, an officer brought him a
    list of the strangers who had arrived.
  </PARA>
</ARTICLE>

برای جزئیات بیشتر، توصیه W3C را ببینید “Associating Style Sheets with XML documents”

شیوه نامه های تعبیه شده

نکته: آن را در مرورگر خود امتحان کنید

HTML دارای یک عنصر سبک است که به شیوه نامه (های) اجازه می دهد بدون نیاز به فایل خارجی مستقیماً در فایل HTML جاسازی شود. در برخی موارد این آسان تر است، به خصوص زمانی که شیوه نامه بسیار خاص آن سند است.

اکثر قالب‌های مبتنی بر XML چنین عنصری ندارند، اما همان PI که به شیوه نامه‌های خارجی پیوند می‌دهد نیز می‌تواند برای اشاره به شیوه نامه‌هایی که در خود سند تعبیه شده‌اند استفاده شود. از فوریه 2006 هنوز مشکلات فنی در این مورد وجود دارد و هیچ مشخصات رسمی وجود ندارد. مثلا:

<?xml-stylesheet href="#style"
   type="text/css"?>
<ARTICLE>
  <EXTRAS id="style">
    INSTRUMENT { display: inline }
    ARTICLE, HEADLINE, AUTHOR, PARA {
      display: block }
    EXTRAS { display: none }
  </EXTRAS>
  <HEADLINE>Fredrick the Great meets
    Bach</HEADLINE>
  ...
</ARTICLE>

در این مورد باید ویژگی type="text/css" وجود داشته باشد، در غیر این صورت مرورگر (یا برنامه دیگر) باید زبان شیوه نامه را حدس بزند. xml-stylesheet PI اکنون نه به یک شیوه نامه خارجی، بلکه به عنصری از خود سند اشاره می کند. آن عنصر با یک ویژگی id که به عنوان هدف پیوند عمل می کند، شناسایی می شود. (بسته به فرمت خاص XML ویژگی id ممکن است چیز دیگری نامیده شود؛ در برخی از قالب‌ها ممکن است اصلاً ویژگی مناسبی وجود نداشته باشد.)

مشکلات حل نشده

توصیه W3C "ارتباط Style Sheets با اسناد XML" موردی از شیوه نامه های جاسازی شده را تعریف نمی کند، اگرچه به نظر می رسد یک برون یابی منطقی برای اجازه دادن به قطعات URL (با "#" شروع می شود). در این زمان، اوایل سال 2006، هنوز مشکلات حل نشده وجود دارد و هیچ مشخصات منتشر شده ای وجود ندارد. مشکلات به شرح زیر است:

  1. از آنجا که شیوه نامه تعبیه شده به طور جداگانه از سرور دانلود نمی شود، سرور نمی تواند به مرورگر بگوید که فرمت شیت چیست. بنابراین، ویژگی type در این مورد مورد نیاز است. تعریف نشده است اگر ویژگی حذف شود چه اتفاقی می افتد: آیا صفحه سبک نادیده گرفته می شود؟ آیا فرض می شود که CSS باشد؟ آیا الگوریتمی برای تعیین زبان وجود دارد؟
  2. در اکثر فرمت های مبتنی بر XML یک شناسه قطعه یک عنصر کامل را شناسایی می کند، نه محتوای یک عنصر. اما شیوه نامه ای که با <ARTICLE> شروع می شود، CSS درستی نیست، بنابراین به نظر می رسد باید یک قانون اضافی وجود داشته باشد که شناسه قطعه مورد استفاده در یک شیوه نامه PI به محتوای یک عنصر اشاره کند، نه به خود عنصر.
  3. به طور مشابه، تعریف نشده است که اگر عناصر فرزند در داخل عنصری که به آن اشاره شده باشد، چه اتفاقی می‌افتد. آیا شیوه نامه شامل تمام محتویات همه عناصر به هم پیوسته است؟ محتویات فقط عنصر اول؟ یا این یک خطا است و کل عنصر نادیده گرفته می شود؟
  4. در مثال بالا، URL به خود سند اشاره می کند. این واقعیت که مرورگر اصلاً قادر است به آن URL نگاه کند نشان می دهد که می داند چگونه XML را تجزیه کند و احتمالاً می تواند عنصر سبک مشخص شده را پیدا کند. اما اکنون URL را در نظر بگیرید که به بخشی از یک سند خارجی اشاره می کند. برای بازیابی موفقیت آمیز شیوه نامه، مرورگر باید ابتدا سند خارجی را دانلود و تجزیه کند و سپس شیوه نامه را استخراج و تجزیه کند. اما ویژگی type فقط نوع یکی از این دو را می دهد و بنابراین مرورگر نمی تواند بداند که آیا می تواند از شیوه نامه استفاده کند یا خیر. حتی مشخص نشده است که ویژگی‌های type نوع سند خارجی را نشان می‌دهد یا شیوه نامه تعبیه‌شده در آن.

مشکلات دیگر

  1. شیوه نامه PI با "Generic XML" یعنی با XML در قالبی که مرورگر آن را نمی شناسد، بسیار مفید است. به لطف شیوه نامه، حداقل می تواند چیزی را نمایش دهد. فرمت های معروف مانند SVG SMIL یا XHTML قوانین خاص خود را برای رندر دارند که فراتر از آن چیزی است که یک شیوه نامه می تواند مشخص کند. اما موارد دیگری نیز وجود دارد که مرورگر وقتی سند را به عنوان Generic XML تلقی می‌کند نمی‌داند: به ویژه، نمی‌داند کدام ویژگی‌ها ویژگی‌های ID هستند. یک توصیه W3C برای مشخصه ای به نام xml:id وجود دارد و اگر سند حاوی ویژگی هایی از آن نام باشد، به احتمال زیاد قطعه URL به یکی از آن ها اشاره می کند. اما اگر چنین ویژگی‌هایی وجود نداشته باشد، مرورگر باید روش‌های دیگری را امتحان کند تا مشخص کند کدام ویژگی‌ها ID هستند. اگر سند دارای یک DOCTYPE در بالا باشد و مرورگر بتواند DTD را که به آن اشاره می کند بازیابی کند، آن DTD ویژگی را مشخص می کند. اما ممکن است مرورگرها نتوانند DTD ها را بخوانند یا ممکن است DOCTYPE وجود نداشته باشد.
  2. شناسه قطعه تنها یک راه برای اشاره به یک عنصر در یک سند است. یکی دیگر از توصیه های W3C XPointers را برای شناسایی عناصر در یک سند بدون نیاز به ویژگی های ID تعریف می کند. اما درک XPointers در حال حاضر برای مرورگرهایی که از شیوه نامه PI استفاده می کنند الزامی نیست و بنابراین مشخص نیست که آیا مرورگر می تواند XPointers را در صورت امکان تفسیر کند یا باید آنها را نادیده بگیرد.

سبک های درون خطی

HTML همچنین به سبک ها اجازه می دهد تا مستقیماً با استفاده از ویژگی سبک به عناصر جداگانه متصل شوند. اکثر قالب‌های سند مبتنی بر XML چنین ویژگی را ندارند، اگرچه برخی ممکن است اجازه دهند ویژگی‌ها (ماژول‌های) از HTML در داخل سند استفاده شوند.

ویژگی های کلاس

نکته: آن را در مرورگر خود امتحان کنید

ویژگی کلاس که به شما امکان می دهد زیر کلاس های عناصر را در HTML ایجاد کنید، در اکثر فرمت های سند مبتنی بر XML نیز وجود ندارد. البته، CSS به شما امکان می‌دهد عناصر را بر اساس هر ویژگی، نه فقط کلاس انتخاب کنید، اما سینتکس راحت‌تر است.

به عنوان مثال. اگر یک ویژگی کلاس وجود داشته باشد و فرمت سند مشخص کند که مانند HTML کار می کند، می توانیم از نماد با نقطه استفاده کنیم. (بنابراین، این مثال خاص کار نخواهد کرد، زیرا <doc> قالبی نیست که مرورگرها آن را به عنوان چیزی که دارای ) کلاس) است بشناسند)

<?xml-stylesheet href="#s1"
   type="text/css"?>
<doc>
  <s id="s1">
    s { display: none }
    p { display: block }
    p.note { color: red }
  </s>
  <p>Some text... </p>
  <p class="note">A note... </p>
</doc>

اگر فرمت سند مشخص نمی کند که کلاس یک زیر کلاس ایجاد می کند، باید از انتخابگرهای طولانی تر با "[ ]" استفاده کنید:

<?xml-stylesheet href="#s1"
  type="text/css"?>
<doc>
  <s id="s1">
    s { display: none }
    p { display: block }
    p[class~=note] { color: red }
  </s>
  <p>Some text... </p>
  <p class="note">A note... </p>
</doc>

اگر ویژگی کلاس وجود نداشته باشد، اما چیز دیگری وجود دارد که می توانیم استفاده کنیم، انتخابگرهای ویژگی "[ ]" همچنان اعمال می شوند:

آن را در مرورگر خود امتحان کنید

<?xml-stylesheet href="#s1" type="text/css"?>
<doc>
  <s id="s1">
    s { display: none }
    p { display: block }
    p[warning="yes"] { color: red }
  </s>
  <p>Some text... </p>
  <p warning="yes">A note... </p>
</doc>
Bert Bos, سبک رهبری فعالیت
کپی رایت © 1994–2022 W3C® سیاست حفظ حریم خصوصی

ایجاد شده در 29 فوریه 2000;
اخرین به روز رسانی چهارشنبه ۰۶ آوریل ۲۲، ۱۳:۵۲:۲۴

زبان ها

درباره ترجمه ها