YAZ-ZTEST(8) System management commands YAZ-ZTEST(8)

yaz-ztest - سرور آزمایشی Z39.50/SRU

application [-install] [-installa] [-remove] [-a file] [-v level] [-l file] [-u uid] [-c config] [-f vconfig] [-C fname] [-t minutes] [-k kilobytes] [-K] [-d daemon] [-w dir] [-p pidfile] [-r kilobytes] [-ziDSTV1] [listener-spec...]

yaz-ztest یک سرور آزمایشی Z39.50/SRU است که از API سرور فرانت‌اند عمومی YAZ (GFS) استفاده می‌کند. این سرور مانند یک سرور واقعی Z39.50/SRU عمل می‌کند اما از پایگاه‌داده استفاده نمی‌کند. این برنامه تعداد نتایج تصادفی را برمی‌گرداند و زیرمجموعه‌ای از چند رکورد داخلی را ارائه می‌دهد.

مشخصه listener-spec شامل یک حالت انتقال به همراه دو‌نقطه و به دنبال آن یک نشانی شنونده است. حالت انتقال یکی از موارد tcp، unix یا ssl است.

برای TCP و SSL، یک نشانی به شکل زیر است:

hostname | IP-number [ : portnumber ]

برای سوکت محلی UNIX، نشانی نام پرونده سوکت محلی است.

-a file

مشخص کردن پرونده‌ای برای تخلیه (dump) واحدهای PDU (برای اهداف عیب‌یابی). نام ویژه - (خط تیره) خروجی را به خروجی خطای استاندارد (stderr) ارسال می‌کند.

-S

عدم انشعاب فرآیند (fork) یا ایجاد ریسه‌ها در درخواست‌های اتصال. این گزینه برای اشکال‌زدایی مناسب است، اما برای عملیات واقعی توصیه نمی‌شود: اگرچه سرور ناهمگام و نامسدودکننده است، اما جلوگیری از این که نقص نرم‌افزاری (یا به عبارتی کرش) بر تمام کاربران فعلی تأثیر بگذارد مطلوب است.

-1

مشابه -S است، اما سرور پس از یک نشست خارج می‌شود. این حالت فقط برای اشکال‌زدایی است.

-T

اجرای سرور در حالت ریسه‌ای (threaded). سرور به جای انشعاب یک فرآیند، برای هر اتصال یک ریسه ایجاد می‌کند. تنها در سیستم‌های یونیکس که ریسه‌های POSIX را ارائه می‌دهند در دسترس است.

-s

استفاده از پروتکل SR (منسوخ‌شده).

-z

استفاده از پروتکل Z39.50 (پیش‌فرض). این گزینه و -s مکمل یکدیگرند. می‌توانید از هر دو چندین بار در یک خط فرمان، بین مشخصه‌های شنونده (در زیر ببینید) استفاده کنید. به این ترتیب، می‌توانید سرور را طوری تنظیم کنید که به طور همزمان برای اتصالات در هر دو پروتکل، روی درگاه‌های محلی مختلف گوش فرا دهد.

-l file

پرونده لاگ.

-c config

یک گزینه کاربری که به عنوان مشخص‌کننده نوعی پیکربندی، معمولاً یک نام پرونده، عمل می‌کند. آرگومان این گزینه به عضو configname از statserv_options_block منتقل می‌شود.

-f vconfig

یک پرونده XML را مشخص می‌کند که یک یا چند سرور مجازی فرانت‌اند YAZ را توصیف می‌کند.

-C fname

تنظیم نام پرونده گواهی SSL برای سرور (PEM).

-v level

سطح لاگ. از یک فهرست جداشده با کاما از اعضای مجموعه {fatal,debug,warn,log,malloc,all,none} استفاده کنید.

-u uid

تنظیم شناسه کاربر (UID). شناسه کاربری واقعی فرآیند سرور را روی کاربر داده‌شده تنظیم می‌کند. این گزینه زمانی مفید است که مایل نیستید سرور به عنوان ریشه اجرا شود، اما برای اتصال به یک درگاه ممتاز باید آن را به عنوان ریشه راه‌اندازی کنید.

-w dir

سرور قبل از گوش دادن به اتصالات ورودی به این دایرکتوری تغییر مسیر می‌دهد. این گزینه زمانی مفید است که سرور از دیمن inetd کار می‌کند (به -i مراجعه کنید).

-p pidfile

مشخص می‌کند که سرور باید شناسه فرآیند (PID) خود را در پرونده داده‌شده توسط pidfile بنویسد. یک مکان معمول /var/run/yaz-ztest.pid خواهد بود.

-i

استفاده از این گزینه برای اجرای سرور از طریق سرور inetd (فقط یونیکس).

-D

استفاده از این گزینه برای اینکه سرور خود را در پس‌زمینه قرار داده و به عنوان دیمن اجرا شود. اگر هیچ‌یک از گزینه‌های -i یا -D داده نشوند، سرور در پیش‌زمینه شروع به کار می‌کند.

-install

استفاده از این گزینه برای نصب سرور به عنوان یک سرویس NT (فقط در ویندوز NT/2000/XP). با مراجعه به بخش Services در Control Panel سرور را کنترل کنید.

-installa

استفاده از این گزینه برای نصب سرور به عنوان یک سرویس NT و علامت‌گذاری آن به عنوان "شروع خودکار" (auto-start). با مراجعه به بخش Services در Control Panel سرور را کنترل کنید.

-remove

استفاده از این گزینه برای حذف سرور از سرویس‌های NT (فقط در ویندوز NT/2000/XP).

-t minutes

مهلت زمانی عدم فعالیت نشست، بر حسب دقیقه.

-k size

حداکثر اندازه رکورد/اندازه پیام، بر حسب کیلوبایت.

-K

اجبار به عدم استفاده از keepalive برای نشست‌های HTTP. به طور پیش‌فرض GFS نشست‌ها را برای نشست‌های HTTP 1.1 زنده نگه می‌دارد (همان‌طور که توسط استاندارد تعریف شده است). استفاده از این گزینه، GFS را وادار می‌کند تا اتصال را برای هر عملیات ببندد.

-r size

حداکثر اندازه پرونده لاگ قبل از چرخش (rotation)، بر حسب کیلوبایت. اندازه پیش‌فرض 1048576 کیلوبایت (معادل 1 گیگابایت) است.

-d daemon

تنظیم نام دیمن برای استفاده در پرونده دسترسی میزبان‌ها. به hosts_access(5) و tcpd(8) مراجعه کنید.

-m time-format

تنظیم قالب برچسب‌های زمانی در پرونده لاگ. رشته‌ای را در قالب ورودی strftime() مشخص کنید.

-V

نمایش نسخه YAZ و خروج.

yaz-ztest به طور معمول یک تعداد نتیجه تصادفی بین 0 و 24 برمی‌گرداند. با این حال، اگر عبارت پرس‌وجو شامل ارقام پیشرو باشد، مقدار صحیح آن عبارت به عنوان تعداد نتایج استفاده می‌شود. این به آزمایش‌کنندگان اجازه می‌دهد هر تعداد نتیجه‌ای را دریافت کنند. yaz-ztest شامل 24 رکورد MARC برای آزمایش است. تعداد نتایج فراتر از 24 باعث می‌شود yaz-ztest همان دسته رکورد را بارها و بارها برگرداند. بنابراین رکورد در موقعیت 1، 25، 49 و غیره معادل یکدیگر هستند.

برای XML، اگر هیچ مجموعه عنصری داده نشود یا عنصر دارای مقدار "marcxml" باشد، MARCXML برگردانده می‌شود (هر یک از 24 رکورد ساختگی از ISO2709 به XML تبدیل می‌شوند). برای مجموعه عنصر OP، در این صورت OPAC XML برگردانده می‌شود.

برنامه yaz-ztest همچنین ممکن است رکوردهای XML از پیش تعریف‌شده را برگرداند (برای آزمایش). این مورد در صورتی فعال می‌شود که متغیر محیطی YAZ_ZTEST_XML_FETCH تعریف شده باشد. یک رکورد از یک پرونده واکشی می‌شود (یک رکورد در هر پرونده). مسیر نام پرونده به صورت FE.d.xml است که در آن F مقدار YAZ_ZTEST_XML_FETCH (احتمالاً خالی)، E مجموعه عنصر، و d موقعیت رکورد (با شروع از 1) است.

پایگاه‌های داده زیر توسط yaz-ztest پشتیبانی می‌شوند: Default، slow و db.* (تمام پایگاه‌های داده با پیشوند "db"). هر پایگاه‌داده دیگری باعث می‌شود yaz-ztest کد خطای تشخیصی 109 را با عنوان "Database unavailable" برگرداند.

گزینه‌های جستجو ممکن است به شکل آرگومان‌های get در URL به عنوان بخشی از نام پایگاه‌داده Z39.50 گنجانده شوند. گزینه‌های پایگاه‌داده زیر موجود هستند: search-delay، present-delay، fetch-delay و seed.

گزینه‌های قبلی از نوع تأخیر، یک تأخیر ساختگی (sleep) را مشخص می‌کنند که yaz-ztest به ترتیب هنگام جستجو، ارائه و واکشی رکوردها انجام می‌دهد. مقدار تأخیر ممکن است یک مقدار ممیز شناور ثابت باشد که تأخیر را بر حسب ثانیه مشخص می‌کند. از طرف دیگر، مقدار می‌تواند به صورت دو عدد ممیز شناور جداشده با دونقطه داده شود که باعث می‌شود yaz-ztest یک وقفه تصادفی بین عدد اول و دوم انجام دهد.

پارامتر پایگاه‌داده seed یک عدد صحیح به عنوان مقدار می‌گیرد. این کار تابع srand را با این عدد صحیح فراخوانی می‌کند تا اطمینان حاصل شود که رفتار تصادفی قابل تکرار است.

فرض کنید می‌خواهیم جستجوها بین 0.1 و 0.5 ثانیه طول بکشند و یک واکشی 0.2 ثانیه طول بکشد. برای دسترسی به پایگاه‌داده آزمایشی Default از عبارت زیر استفاده می‌کنیم: Default?search-delay=0.1:0.5&fetch-delay=0.2.

مکانیزم میزبان‌های مجازی (Virtual hosts) به سرور فرانت‌اند YAZ اجازه می‌دهد تا از چندین بک‌اند پشتیبانی کند. یک بک‌اند بر اساس اتصال TCP/IP (درگاه + نشانی شنونده) و/یا میزبان مجازی انتخاب می‌شود.

یک بک‌اند می‌تواند طوری پیکربندی شود که در یک دایرکتوری کاری خاص اجرا شود. یا فرانت‌اند YAZ ممکن است تبدیل CQL به RPN را انجام دهد، بنابراین اجازه می‌دهد بک‌اندهای سنتی Z39.50 به عنوان سرویس SRW/SRU ارائه شوند. اطلاعات SRW/SRU Explain برای یک بک‌اند خاص نیز می‌تواند مشخص شود.

برای پروتکل HTTP، میزبان مجازی در سرآیند Host مشخص می‌شود. برای پروتکل Z39.50، میزبان مجازی همانند Initialize Request در OtherInfo با شناسه OID 1.2.840.10003.10.1000.81.1 مشخص می‌گردد.


نکته

همه کلاینت‌های Z39.50 اجازه تنظیم اطلاعات VHOST را نمی‌دهند. برای آن‌ها، انتخاب بک‌اند باید تنها به اطلاعات TCP/IP (درگاه و نشانی) متکی باشد.

سرور فرانت‌اند YAZ از XML برای توصیف پیکربندی‌های بک‌اند استفاده می‌کند. گزینه خط فرمان -f نام پرونده پیکربندی XML را مشخص می‌کند.

این پیکربندی از عنصر ریشه yazgfs استفاده می‌کند. این عنصر شامل فهرستی از عناصر listen و به دنبال آن یک یا چند عنصر server است.

عنصر listen شنونده (نقطه پایانی انتقال) مانند TCP/IP، سوکت پرونده یونیکس یا سرور SSL را توصیف می‌کند. محتوای یک شنونده:

CDATA (الزامی)

بخش CDATA برای عنصر listen رشته شنونده را در بر دارد، مانند tcp:@:210، tcp:server1:2100 و غیره.

صفت id (اختیاری)

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

نکته

ما انتظار داریم در نسخه آینده اطلاعات بیشتری به بخش listen اضافه شود، مانند پرونده CERT برای سرورهای SSL.

عنصر server یک سرور و پارامترهای مربوط به این نوع سرور را توصیف می‌کند. محتوای یک سرور:

صفت id (اختیاری)

شناسه برای این سرور. در حال حاضر برای هیچ کاری استفاده نمی‌شود، اما ممکن است برای اهداف ثبت لاگ به کار رود.

صفت listenref (اختیاری)

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

عنصر config (اختیاری)

پیکربندی سرور را مشخص می‌کند. این معادل پیکربندی مشخص‌شده با استفاده از گزینه خط فرمان -c است.

عنصر directory (اختیاری)

یک دایرکتوری کاری را برای این سرور بک‌اند مشخص می‌کند. در صورت تعیین، فرانت‌اند YAZ هر زمان که بک‌اندی از این نوع شروع شود (گرداننده بک‌اند bend_start)، متوقف شود (گرداننده بک‌اند hand_stop) و مقداردهی اولیه شود (bend_init)، دایرکتوری کاری جاری را به این دایرکتوری تغییر می‌دهد.

عنصر host (اختیاری)

میزبان مجازی را برای این سرور مشخص می‌کند. در صورت مشخص شدن، یک کلاینت باید این رشته میزبان را به منظور استفاده از این بک‌اند تعیین کند.

عنصر cql2rpn (اختیاری)

نام پرونده‌ای را مشخص می‌کند که شامل تبدیل CQL به RPN برای این سرور بک‌اند است. در صورت تعیین، سرور بک‌اند تنها یک پرس‌وجوی Type-1/RPN را «خواهد دید».

عنصر ccl2rpn (اختیاری)

نام پرونده‌ای را مشخص می‌کند که شامل تبدیل CCL به RPN برای این سرور بک‌اند است. در صورت تعیین، سرور بک‌اند تنها یک پرس‌وجوی Type-1/RPN را «خواهد دید».

عنصر stylesheet (اختیاری)

ارجاع شیوه‌نامه (stylesheet) را برای قرار گرفتن در پاسخ‌های HTTP SRU زمانی که کلاینت یکی را مشخص نمی‌کند، تعیین می‌نماید. اگر هیچ مقداری داده نشود و کلاینت هم مقداری تعیین نکند، هیچ ارجاع شیوه‌نامه‌ای بخشی از پاسخ HTTP SRU نخواهد بود.

عنصر client_query_charset (اختیاری)

در صورت تعیین، تبدیل از مجموعه نویسه داده‌شده به UTF-8 توسط سرور فرانت‌اند عمومی انجام می‌شود. این کار فقط برای درخواست‌های جستجوی Z39.50 اجرا می‌شود (فرض می‌شود SRU/Solr از قبل با UTF-8 کدگذاری شده‌اند).

عنصر docpath (اختیاری)

مسیری را برای دسترسی محلی به پرونده با استفاده از HTTP مشخص می‌کند. تمام URLهایی با پیشوند پیشرو (به استثنای /) که با مقدار docpath مطابقت داشته باشند برای دسترسی به پرونده استفاده می‌شوند. برای مثال، اگر قرار است سرور دسترسی را در دایرکتوری xsl ارائه دهد، docpath برابر با xsl خواهد بود و تمام URLهای به شکل http://host/xsl منجر به دسترسی محلی به پرونده خواهند شد.

عنصر explain (اختیاری)

محتوای SRW/SRU ZeeRex را برای این سرور مشخص می‌کند. به صورت کلمه‌به‌کلمه برای کلاینت کپی می‌شود. در وضعیت کنونی، برخی از محتویات Explain زاید به نظر می‌رسند زیرا اطلاعات میزبان و غیره در جای دیگری نیز ذخیره می‌شوند.

عنصر maximumrecordsize (اختیاری)

حداکثر اندازه رکورد/اندازه پیام را بر حسب بایت مشخص می‌کند. این مقدار همچنین به عنوان حداکثر اندازه بسته‌های ورودی (برای به‌روزرسانی‌های رکورد و غیره) عمل می‌کند. این همان مقداری است که توسط گزینه -k داده می‌شود.

عنصر retrievalinfo (اختیاری)

امکان بازیابی را برای پشتیبانی از تبدیل‌ها و مشخصات قالب‌ها/انواع رکورد فعال می‌کند.

کد XML زیر سروری را پیکربندی می‌کند که اتصالات را از دو درگاه می‌پذیرد: درگاه TCP/IP به شماره 9900 و یک سوکت پرونده محلی UNIX. ما سرور TCP/IP را public و سرور دیگر را internal می‌نامیم.

<yazgfs>
 <listen id="public">tcp:@:9900</listen>
 <listen id="internal">unix:/var/tmp/socket</listen>
 <server id="server1">
   <host>server1.mydomain</host>
   <directory>/var/www/s1</directory>
   <config>config.cfg</config>
 </server>
 <server id="server2" listenref="public,internal">
   <host>server2.mydomain</host>
   <directory>/var/www/s2</directory>
   <config>config.cfg</config>
   <cql2rpn>../etc/pqf.properties</cql2rpn>
   <explain xmlns="http://explain.z3950.org/dtd/2.0">
     <serverInfo>
       <host>server2.mydomain</host>
       <port>9900</port>
       <database>a</database>
     </serverInfo>
   </explain>
 </server>
 <server id="server3" listenref="internal">
   <directory>/var/www/s3</directory>
   <config>config.cfg</config>
 </server>
</yazgfs>

سه سرور بک‌اند پیکربندی شده وجود دارد. دو سرور اول، "server1" و "server2"، می‌توانند توسط هر دو نشانی شنونده در دسترس قرار گیرند. "server1" توسط همه (هر دو) در دسترس است زیرا هیچ صفت listenref مشخص نشده است. "server2" توسط دو شنونده مشخص‌شده در دسترس است. به منظور تمایز بین این دو، یک میزبان مجازی برای هر سرور در عناصر host مشخص شده است.

برای "server2" عناصری برای تبدیل CQL به RPN پشتیبانی شده و اطلاعات explain اضافه شده است (در اینجا یک نمونه کوتاه برای کوچک نگه داشتن مثال آورده شده است).

سرور سوم، "server3" تنها از طریق شنونده "internal" قابل دسترسی است.

yaz-<version>/ztest/yaz-ztest.c

yaz-<version>/include/yaz/backend.h

yaz(7) yaz-log(7)

Index Data

05/20/2026 YAZ 5.37.3