XPointer-URL nicht aufgelöst, wenn die Adressierung Apostroph-ummantelten @id-Werte

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

  •  26-09-2019
  •  | 
  •  

Frage

Frustrierend Problem mit XInclude / XPointer hier.

Das Ziel ist, fügen Sie Einträge aus einer Liste von XML-formatierten Preis-Einträge in ein anderes Dokument.Ich habe ein Dokument mit einer Liste der Preise, die wie folgt aussieht:

 <?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>

Die folgenden fehl

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

mit

 element include: XInclude error : failed build URL

Wenn ich jetzt das format ändern, das mit den ids in der Preis-Liste werden ausschließlich numerische

 <?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>

und verwenden Sie diese umfassen, ohne die Apostrophe

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

plötzlich funktioniert alles.Also das Problem scheint im Zusammenhang mit der Apostrophe, aber wie bekomme ich das umgehen?

Auch hier ist meine xmllint version info:

 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
War es hilfreich?

Lösung

Aus der XInclude W3C Spec:

Xi:include element hat die folgende Attribute:

href

Ein Wert, der nach entsprechender die Flucht (siehe 4.1.1 Flucht von href Attribut-Werten) durchgeführt wurde, Ergebnisse in einer URI-Referenz oder eine IRI Referenz-Angabe der Lage des die Ressource enthalten.Href das Attribut ist optional;die Abwesenheit von dieses Attribut ist die gleiche wie angeben href="",, dass ist, die Referenz auf das gleiche Dokument.Wenn das href-Attribut ist nicht vorhanden, wenn parse="xml" das xpointer Attribut vorhanden sein muss. Fragment Bezeichner dürfen nicht verwendet werden;Ihre Aussehen ist ein schwerwiegender Fehler. Wert das führt zu einer syntaktisch invalid URI oder IRI berichtet werden soll als ein schwerwiegender Fehler, aber einige Implementierungen kann es unpraktisch, zu unterscheiden diesem Fall aus einer Ressource-Fehler.

So, "Fragment-IDS dürfen nicht verwendet werden;Ihr Aussehen ist ein schwerwiegender Fehler."

Lösung:Versuchen Sie weglassen href - Attributs und die Verwendung der xpointer Attribut.

Jedoch, beachten Sie die folgenden text aus der gleichen Spezifikation:

Unterstützung für die [XPointer xpointer () - Schema] ist nicht obligatorisch für die volle XInclude-Konformität.Autoren werden darauf hingewiesen, dass die Nutzung von xpointer() und andere XPointer-Systeme als element() möglicherweise nicht unterstützt von XInclude-konforme Implementierungen

Schließlich hier ist ein Beispiel aus dem spec mit XPointer fragment Aufnahme:

Der folgende Code zeigt die Ergebnisse der darunter Fragmente von einem anderen XML-Dokument.Übernehmen Basis-URI des Dokuments 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 verweist auf eine DTD, die erklärt die id-Attribute wie ID-Typ und enthält:

<?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>

Das infoset, die aus der Lösung Einschlüsse, die auf diesem Dokument ist das gleiche (außer für die gehören Geschichte und Sprache-Eigenschaften), wie das folgende Dokument:

<?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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top