لم يتم حل عنوان URL الخاص بـ XPointer عند معالجة قيم @id المضمنة بفاصلة عليا

StackOverflow https://stackoverflow.com/questions/4225639

  •  26-09-2019
  •  | 
  •  

سؤال

مشكلة محبطة مع XInclude/XPointer هنا.

الهدف هو تضمين الإدخالات من قائمة إدخالات الأسعار بتنسيق XML في مستند آخر.لدي مستند يحتوي على قائمة الأسعار التي تبدو كما يلي:

 <?xml version="1.0" encoding="iso-8859-1"?>
 <!DOCTYPE preise [
   <!ELEMENT preise (preis+)>
   <!ELEMENT preis (#PCDATA)>
   <!ATTLIST preis id ID #REQUIRED>
 ]>
 <preise>
   <preis id="a0">./.</preis>
 <preis id='foo100'>136,10</preis>
 <preis id='foo101'>163,32</preis>
 </preise>

ما يلي فشل

 <xi:include href="../listen/preise.xml#xpointer(/preise/preis[@id='foo100']/text())" />

مع

 element include: XInclude error : failed build URL

الآن إذا قمت بتغيير تنسيق المعرفات في قائمة الأسعار لتكون رقمية حصريًا

 <?xml version="1.0" encoding="iso-8859-1"?>
 <!DOCTYPE preise [
   <!ELEMENT preise (preis+)>
   <!ELEMENT preis (#PCDATA)>
   <!ATTLIST preis id ID #REQUIRED>
 ]>
 <preise>
   <preis id="a0">./.</preis>
 <preis id='100'>136,10</preis>
 <preis id='101'>163,32</preis>
 </preise>

واستخدم هذا التضمين بدون الفواصل العليا

 <xi:include href="../listen/preise.xml#xpointer(/preise/preis[@id=100]/text())" />

فجأة كل شيء يعمل.يبدو أن المشكلة مرتبطة بالفواصل العليا، لكن كيف أتغلب على ذلك؟

وإليك أيضًا معلومات إصدار xmllint الخاصة بي:

 xmllint: using libxml version 20706
    compiled with: Threads Tree Output Push Reader Patterns Writer SAXv1 FTP HTTP DTDValid HTML Legacy C14N Catalog XPath XPointer XInclude Iconv ISO8859X Unicode Regexps Automata Expr Schemas Schematron Modules Debug Zlib
هل كانت مفيدة؟

المحلول

من Xتشمل مواصفات W3C:

الحادي عشر: تضمين العنصر له السمات التالية:

href

تم تنفيذ القيمة التي تم إجراؤها بعد الهروب المناسبة (انظر 4.1.1 الهروب من قيم سمة HREF) ، أو تؤدي إلى مرجع URI أو مرجع IRI الذي يحدد موقع المورد لتضمينه.سمة HREF اختيارية ؛عدم وجود هذه السمة هو نفسه تحديد HREF = "" ، أي ، المرجع إلى نفس المستند.إذا كانت سمة HREF غائبة عند parse = "xml" ، فيجب أن تكون سمة XPointer موجودة. يجب عدم استخدام معرفات الشظايا ؛مظهرها هو خطأ فادح. يجب الإبلاغ عن القيمة التي تؤدي إلى حدوث URI أو IRI غير صالح بشكل نحلي كخطأ قاتل ، ولكن قد تجد بعض التطبيقات أنه من غير العملي التمييز بين هذه الحالة عن خطأ في المورد.

لذا، "يجب عدم استخدام معرفات الأجزاء؛مظهرهم خطأ فادح."

حل:حاول أن تتجاهل href السمة واستخدام xpointer يصف.

لكن, ، كن على علم ب النص التالي من نفس المواصفات:

دعم [XPointer xpointer() Scheme] ليس إلزاميًا للتوافق الكامل مع XInclude.يُنصح المؤلفون بأن استخدام XPointer () ومخططات XPointer الأخرى من العنصر () قد لا يتم دعمه بواسطة جميع تطبيقات xinclud

أخيراً، هنا مثال من المواصفات لاستخدام تضمين جزء XPointer:

يوضح ما يلي نتائج تضمين أجزاء من مستند XML آخر.افترض أن القاعدة uri من الوثيقة http://www.example.com/JoeSmithQuote.xml.

<?xml version='1.0'?>
<price-quote xmlns:xi="http://www.w3.org/2001/XInclude">
  <prepared-for>Joe Smith</prepared-for>
  <good-through>20040930</good-through>
  <xi:include href="price-list.xml" xpointer="w002-description"/>
  <volume>40</volume>
  <xi:include href="price-list.xml" xpointer="element(w002-prices/2)"/>
</price-quote>

يشير Price-list.xml إلى DTD الذي يعلن عن سمات المعرف كمعرف نوع، ويحتوي على:

<?xml version='1.0'?>
<!DOCTYPE price-list SYSTEM "price-list.dtd">
<price-list xml:lang="en-us">
  <item id="w001">
    <description id="w001-description">
      <p>Normal Widget</p>
    </description>
    <prices id="w001-prices">
      <price currency="USD" volume="1+">39.95</price>
      <price currency="USD" volume="10+">34.95</price>
      <price currency="USD" volume="100+">29.95</price>
    </prices>
  </item>
  <item id="w002">
    <description id="w002-description">
      <p>Super-sized widget with bells <i>and</i> whistles.</p>
    </description>
    <prices id="w002-prices">
      <price currency="USD" volume="1+">59.95</price>
      <price currency="USD" volume="10+">54.95</price>
      <price currency="USD" volume="100+">49.95</price>
    </prices>
  </item>
</price-list>

إن Infoset الناتجة عن حل الإدراج على هذا المستند هو نفسه (باستثناء خصائص التاريخ واللغة) مثل الوثيقة التالية:

<?xml version='1.0'?>
<price-quote xmlns:xi="http://www.w3.org/2001/XInclude">
  <prepared-for>Joe Smith</prepared-for>
  <good-through>20040930</good-through>
  <description id="w002-description" xml:lang="en-us"
               xml:base="http://www.example.com/price-list.xml">
    <p>Super-sized widget with bells <i>and</i> whistles.</p>
  </description>
  <volume>40</volume>
  <price currency="USD" volume="10+" xml:lang="en-us"
         xml:base="http://www.example.com/price-list.xml">54.95</price>
</price-quote>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top