English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
XML تعني لغة العلامات القابلة للتمديد (eXtensible Markup Language).
لغة العلامات القابلة للتمديد، وهي مجموعة فرعية من لغة العلامات العامة، وهي لغة علامات تستخدم لتمييز وحدات الالكترونيات لتكون لها بنية.
يمكن استخدامها لتمييز البيانات، وتعريف أنواع البيانات، وهي لغة مصدر تسمح للمستخدمين بتعريف لغتهم العلامية الخاصة. وهي مناسبة جدًا للنقل عبر الإنترنت، وتقدم طريقة موحدة لوصف وتبادل بيانات منظمة مستقلة عن التطبيقات أو المزودين.
لمزيد من المعلومات، يرجى الرجوع إلى دليل XML
عناصر محولات XML الرئيسية هي DOM وSAX.
محول SAX يعتمد على معالجة الحدث، ويجب مسح مستند XML من البداية إلى النهاية، في عملية المسح، عند كل مرة يواجه بنية لغوية معينة، سيتم استدعاء برنامج معالجة الحدث الخاص بهذه البنية اللغوية، وإرسال حدث إلى التطبيق.
DOM هو نموذج وحدة مستند، يبني بنية النص الهرمية للمستند، ويقوم بإنشاء شجرة DOM في ذاكرة الوحدة، ويتم تمثيل عناصر شجرة DOM كأجسام، بعد تحليل المستند، سيتم وضع شجرة DOM بأكملها في ذاكرة الوحدة.
يمكن استخدام مكتبة REXML هذه لتحليل مستندات XML في Ruby.
مكتبة REXML هي مجموعة أدوات XML لـ Ruby، مكتوبة بلغة Ruby النقية، وتتبع معيار XML 1.0.
في إصدار Ruby 1.8 وما بعده، سيتم تضمين REXML في مكتبة Ruby القياسية.
مسار مكتبة REXML هو: rexml/document
تم تعبئة جميع الطرق والوحدات داخل وحدة REXML.
يملك محول REXML المزايا التالية مقارنة بالمحولات الأخرى:
100% مكتوبة بلغة Ruby.
يمكن تطبيقه على محولات SAX وDOM.
إنه خفيف الوزن، لا يتجاوز 2000 سطر من البرمجة.
طرق ووحدات سهلة الفهم.
يستند إلى API SAX2 ودعم XPath الكامل.
تثبيت Ruby، دون الحاجة إلى تثبيت أي مكتبات إضافية.
أعلاه هو مثال على شفرة XML، احفظها كـ movies.xml:
<collection shelf="New Arrivals"> <movie title="Enemy Behind"> <type>حرب، رعب</type> <format>DVD</format> <year>2003</year> <rating>PG</rating> <stars>10</stars> <description>تحدث عن حرب بين الولايات المتحدة واليابان</description> </movie> <movie title="Transformers"> <type>أنيمة، خيال علمي</type> <format>DVD</format> <year>1989</year> <rating>R</rating> <stars>8</stars> <description>خيال علمي</description> </movie> <movie title="Trigun"> <type>أニمة، فعل</type> <format>DVD</format> <episodes>4</episodes> <rating>PG</rating> <stars>10</stars> <description>Vash the Stampede!</description> </movie> <movie title="Ishtar"> <type>كوميدي</type> <format>VHS</format> <rating>PG</rating> <stars>2</stars> <description>ملخص يمكن مشاهدته</description> </movie> </collection>
دعونا نبدأ بتحليل بيانات XML، أولاً دعونا نستورد مكتبة rexml/document، عادةً يمكننا دمج REXML في المساحة الاسمية العليا:
#!/usr/bin/ruby -w #!/usr/bin/ruby -w require 'rexml/document' include REXML xmlfile = File.new("movies.xml") # الحصول على عنصر root root = xmldoc.root puts "عنصر الجذر : " + root.attributes["shelf"] # ستقوم بإخراج عنوان الفيلم xmldoc.elements.each("collection/movie"){ |e| puts "فيلم عنوان : " + e.attributes["title"] } # سيتم عرض جميع أنواع الأفلام xmldoc.elements.each("collection/movie/type") { |e| puts "نوع فيلم: " + e.text } # سيتم عرض جميع وصفات الأفلام xmldoc.elements.each("collection/movie/description") { |e| puts "وصف فيلم: " + e.text }
نتيجة العرض في المثال أعلاه هي:
عنصر جذر: New Arrivals عنوان فيلم: العدو خلفي عنوان فيلم: Transformers عنوان فيلم: Trigun عنوان فيلم: Ishtar نوع فيلم: حرب،مثير للإثارة نوع فيلم: أنمي،خيال علمي نوع فيلم: أنمي،عنف نوع فيلم: كوميدي وصف فيلم: نتحدث عن حرب بين الولايات المتحدة واليابان وصف فيلم: خيال علمي وصف فيلم: Vash the Stampede! وصف فيلم: فوضى مرئية تحليل يشبه SAX:
معالجة نفس ملف البيانات: movies.xml،لا ينصح باستخدام تحليل SAX لملف صغير،إليك مثال بسيط:
#!/usr/bin/ruby -w #!/usr/bin/ruby -w require 'rexml/streamlistener' require 'rexml/document' class MyListener include REXML::StreamListener def tag_start(*args) puts "tag_start: #{args.map {|x| x.inspect}.join(', ')}" end def text(data) return if data =~ /^\w*$/ # فقط حروف abbrev = data[0..40] + (data.length > 40 ? "..." : ") puts " text: #{abbrev.inspect}" end end list = MyListener.new include REXML Document.parse_stream(xmlfile, list)
نتيجة الخروج أعلاه هي:
tag_start: "collection", {"shelf"=>"New Arrivals"} tag_start: "movie", {"title"=>"Enemy Behind"} tag_start: "type", {} text: "War, Thriller" tag_start: "format", {} tag_start: "year", {} tag_start: "rating", {} tag_start: "stars", {} tag_start: "description", {} text: "Talk about a US-Japan war" tag_start: "movie", {"title"=>"Transformers"} tag_start: "type", {} text: "Anime, Science Fiction" tag_start: "format", {} tag_start: "year", {} tag_start: "rating", {} tag_start: "stars", {} tag_start: "description", {} text: "A schientific fiction" tag_start: "movie", {"title"=>"Trigun"} tag_start: "type", {} text: "Anime, Action" tag_start: "format", {} tag_start: "episodes", {} tag_start: "rating", {} tag_start: "stars", {} tag_start: "description", {} text: "Vash the Stampede!" tag_start: "movie", {"title"=>"Ishtar"} tag_start: "type", {} tag_start: "format", {} tag_start: "rating", {} tag_start: "stars", {} tag_start: "description", {} text: "Viewable boredom"
يمكننا استخدام XPath لعرض XML، XPath هو لغة تستخدم لبحث المعلومات في وثائق XML (انظر:)XPath تعليمات)。
XPath هو لغة مسار XML، وهي لغة تستخدم لتحديد موقع جزء معين من وثيقة XML (جزء من لغة العلامات العامة للنصوص). XPath قائم على بنية الشجرة لـ XML، يوفر القدرة على البحث عن العقد في بنية الشجرة.
Ruby من خلال XPath في REXML يدعم، وهو قائم على التحليل العشبي (نموذج وثيقة).
#!/usr/bin/ruby -w #!/usr/bin/ruby -w require 'rexml/document' include REXML xmlfile = File.new("movies.xml") xmldoc = Document.new(xmlfile) # معلومات第一个电影 movie = XPath.first(xmldoc, "//movie") # p movie # طباعة جميع أنواع الأفلام # الحصول على أنواع جميع الأفلام، العودة إلى مصفوفة names = XPath.match(xmldoc, "//format").map {|x| x.text} p names
نتيجة العرض في المثال أعلاه هي:
<movie title='Enemy Behind'>...</movie> War, Thriller Anime, Science Fiction Anime, Action Comedy ["DVD", "DVD", "DVD", "VHS"]
هناك مفسران لغة XSLT في Ruby، وسيتم تقديم وصف مختصر لهما أدناه:
هذا المفسر تم كتابته ومحافظته عليه من قبل Masayoshi Takahashi. هذا المفسر تم كتابته بشكل رئيسي لمنصة Linux، ويحتاج إلى المكتبات التالية:
Sablot
Iconv
Expat
يمكنك العثور عليها في Ruby-Sablotron ابحث عن هذه المكتبات.
تم كتابة XSLT4R من قبل Michael Neumann. XSLT4R يستخدم لتفاعل سلسلة الأوامر البسيطة، ويستطيع أن يستخدمه تطبيقات ثالثة لتحويل مستندات XML.
XSLT4R يحتاج إلى عملية XMLScan، وهي تحتوي على XSLT4R الأرشيف، وهو مكتبة 100% Ruby. يمكن تثبيت هذه المكتبات باستخدام طريقة تثبيت Ruby القياسية (أي install.rb).
تنسيق لغة XSLT4R كالتالي:
ruby xslt.rb stylesheet.xsl document.xml [المعلمات]
إذا كنت ترغب في استخدام XSLT4R في تطبيقك، يمكنك استيراد XSLT وإدخال المعلمات التي تحتاجها. مثال أدناه:
require "xslt" stylesheet = File.readlines("stylesheet.xsl").to_s xml_doc = File.readlines("document.xml").to_s arguments = { 'image_dir' => '/....' } sheet = XSLT::Stylesheet.new( stylesheet, arguments ) # output to StdOut sheet.apply( xml_doc ) # output to 'str' str = "" sheet.output = [ str ] sheet.apply( xml_doc )
مفسّر REXML الكامل، يرجى الرجوع إلى المستند مستند مفسّر REXML.
يمكنك الحصول على مكتبة RAA تنزيل XSLT4R من هنا.