HXPIPE(1) HTML-XML-utils HXPIPE(1)

hxpipe - تبدیل ساختار HTML یا XML به فرمت خطی مناسب پایپ

hxpipe [ -l ] [ -H ] [ -- ] [ file-or-URL ]

دستور hxpipe یک فایل HTML یا XML را تجزیه کرده و یک نمایش خط‌محور از آن ارائه می‌دهد که برای پردازش‌های بعدی با AWK یا ابزارهای مشابه بسیار مناسب است. این قالب مشابه خروجی ESIS (مجموعه اطلاعات ساختار عناصر) است که توسط nsgmls/onsgmls تولید می‌شود.

عملیات معکوس، یعنی تبدیل مجدد به ساختار نشانه‌گذاری، توسط برنامه hxunpipe انجام می‌شود.

قالب خروجی به شرح زیر است:

<!--comment-->
توضیحات (کامنت‌ها) به صورت زیر در خروجی نمایش داده می‌شوند:


*comment

به این معنا که یک سطر با "*" شروع شده و متن کامنت در ادامه آن می‌آید. کاراکترهای رفتن به خط بعد (Line feed)، بازگشت به ابتدای خط (Carriage return) و تب (Tab) در متن به ترتیب به صورت "\n"، "\r" و "\t" نوشته می‌شوند. متنی که شبیه به یک موجودیت کاراکتری عددی (Numerical character entity) باشد، با جایگزینی "&" با "\" نوشته می‌شود. سطر با یک کاراکتر رفتن به خط بعد پایان می‌یابد.

توجه داشته باشید که onsgmls کامنت‌ها را با شروع از "_" به جای "*" خروجی می‌دهد و "&" را در موجودیت‌های کاراکتری عددی با "\" جایگزین نمی‌کند (و به صورت پیش‌فرض کامنت‌ها را به کلی نادیده می‌گیرد).
<?processing instruction>
دستورالعمل‌های پردازشی (Processing instructions) به صورت زیر خارج می‌شوند:


?processing instruction

یعنی یک سطر با "?" شروع شده و متن دستورالعمل در ادامه آن قرار می‌گیرد. نویسه‌های خاص متن نیز مانند بخش کامنت‌ها اسکیپ می‌شوند (به بالا مراجعه کنید).

<!DOCTYPE root PUBLIC "-//foo//DTD bar//EN" "http://example.org/dtd">
شناسه‌های DOCTYPE به یکی از اشکال زیر در خروجی می‌آیند:


!root "-//foo//DTD bar//EN" http://example.org/dtd
!root "-//foo//DTD bar//EN"
!root "" http://example.org/dtd
!root ""

به ترتیب برای: یک DOCTYPE همراه با (۱) هر دو شناسه عمومی (Public) و سیستمی (System)، (۲) فقط شناسه عمومی، (۳) فقط شناسه سیستمی، یا (۴) هیچ‌کدام از این دو. به عبارت دیگر، یک سطر منفرد با "!" شروع می‌شود، به دنبال آن یک فاصله و یک رشته نقل‌قول‌شده (که ممکن است خالی باشد)، و سپس در صورت وجود یک فاصله و متنی دلخواه می‌آید. به وجود علامت‌های نقل‌قول برای شناسه عمومی و نبود آن برای شناسه سیستمی توجه کنید.

<elt att1="value1" att2="value2">
تگ آغازین (Start tag) به صورت زیر در خروجی قرار می‌گیرد:


Aatt1 CDATA value1
Aatt2 CDATA value2
(elt

به این صورت که شامل صفر یا چند سطر برای ویژگی‌ها (Attributes) و یک سطر برای نوع عنصر است. هر سطرِ مربوط به ویژگی با "A" شروع می‌شود و به دنبال آن نام ویژگی، یک فاصله، عبارت ثابت "CDATA"، یک فاصله دیگر و سپس مقدار ویژگی می‌آید. نویسه‌های خاص مقدار ویژگی همانند کامنت‌ها اسکیپ می‌شوند (به بالا مراجعه کنید). سطر مربوط به نوع عنصر نیز با "(" شروع شده و نام نوع عنصر در ادامه آن می‌آید.

دستور hxpipe فایل‌های DTD را نمی‌خواند و فرض می‌کند که ویژگی‌ها همواره از نوع CDATA هستند. این برنامه برخلاف onsgmls هرگز انواع دیگر (مانند IMPLIED، TOKEN، ID و غیره) را تولید نمی‌کند.
</elt>
تگ‌های پایانی (End tags) به صورت زیر خروجی داده می‌شوند:


)elt

یعنی به صورت سطری که با ")" شروع شده و به دنبال آن نوع عنصر می‌آید.

<empty att1="val1" att2="val2"/>
عناصر خالی (Empty elements) به این شکل خارج می‌شوند:


Aatt1 CDATA val1
Aatt2 CDATA val2
|empty

یعنی صفر یا چند سطر برای ویژگی‌ها و یک سطر که با "|" شروع شده و با نوع عنصر ادامه می‌یابد.

توجه داشته باشید که onsgmls هرگز علامت "|" را خروجی نمی‌دهد (با این حال می‌تواند به صورت اختیاری سطری شامل یک حرف "e" درست پیش از سطر "(" درج کند تا خالی بودن عنصر را مشخص نماید).
متن معمولی به این شکل در خروجی نمایش داده می‌شود:


-text

یعنی به صورت یک سطر منفرد که با "-" آغاز می‌شود. متن موجود همانند کامنت‌ها اسکیپ می‌شود (به بالا مراجعه کنید).

هنگامی که گزینه -l فعال باشد، hxpipe خطوطی به شکل زیر را در میان خروجی درج می‌کند:


L12

که در آن "12" با شماره سطر منبع که خروجی بعدی از آن آمده است جایگزین می‌شود.

دستور hxpipe ورودی را تنها از این جهت نرمال‌سازی می‌کند که ویژگی‌ها را با ترتیبی ثابت (به ترتیب الفبایی، اما مستقل از محلی‌سازی/Locale) خروجی می‌دهد. این برنامه فایل DTD را نمی‌خواند، بنابراین فاصله‌های خالی اضافی را حذف نمی‌کند و نمی‌تواند ویژگی‌های ضمنی (Implied) را اضافه کند. همچنین موجودیت‌های کاراکتری را بسط نمی‌دهد (هرچند می‌توانید ورودی را ابتدا از طریق hxunent پایپ کنید). این ابزار تگ‌های ضمنی را نیز اضافه نمی‌کند (مگر با استفاده از گزینه -H).

گزینه‌های زیر پشتیبانی می‌شوند:

افزودن سطرهای "L" به خروجی برای نشان دادن شماره سطرها در فایل منبع. در حال حاضر این گزینه همزمان با گزینه -H کار نمی‌کند.
اعمال قواعد ویژه برای HTML. در حالت عادی، hxpipe ورودی را به عنوان یک فایل ساختاریافته معتبر (Well-formed) XML در نظر می‌گیرد. با فعال‌سازی این گزینه، hxpipe ورودی را HTML فرض کرده و تگ‌های ضمنی را اضافه می‌کند، عناصر خالی را تشخیص می‌دهد و محتوای تگ‌های <script> و <style> را به عنوان متن خام پردازش می‌نماید.

عملوند زیر پشتیبانی می‌شود:

نام یا نشانی اینترنتی (URL) فایل HTML. در صورت عدم درج، ورودی استاندارد (Standard input) خوانده می‌شود.

مقادیر خروج زیر بازگردانده می‌شوند:

0
پایان موفقیت‌آمیز عملیات.
> 0
خطایی در تجزیه فایل HTML رخ داده است. hxpipe تلاش خواهد کرد خطا را اصلاح کرده و در هر صورت خروجی را تولید کند.

برای استفاده از پراکسی جهت دریافت فایل‌های از راه دور، متغیرهای محیطی http_proxy و ftp_proxy را تنظیم کنید. برای مثال:

http_proxy="http://localhost:8080"

بازیابی و مدیریت خطا برای اسناد نامعتبر HTML بسیار ابتدایی است.

در حال حاضر hxpipe تنها می‌تواند فایل‌های از راه دور را از طریق پروتکل HTTP دریافت کند. این ابزار از فایل‌های دارای گذرواژه محافظت‌شده یا فایل‌هایی که محتوای آن‌ها به کوکی‌های HTTP وابسته است پشتیبانی نمی‌کند.

گزینه -l باید برای ورودی‌های HTML (گزینه -H) نیز کار کند.

hxunpipe(1), hxunent(1), onsgmls(1).

10 Feb 2022 8.x