Announcement

Collapse
No announcement yet.

unbekannte Elemente mit bekannten Kinder-Elemente oder bekannten Attributen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • unbekannte Elemente mit bekannten Kinder-Elemente oder bekannten Attributen

    Hallo !!

    Im Rahmen eines Projektes ist es nötig XML-Dateien einzulesen und zu analysieren (mit einem geschriebenem c++ Programm unter Einbindung des Xerces-c Parser mit eingeschalteter Validierung). Die XML-Dateien haben immer eine ähnliche Struktur, nur einige Elementnamen sind nicht vorher bekannt.
    Mir ist es bisher nicht gelungen eine "saubere" für alle xml-Dateien universale Schemadatei zu erstellen. Die Benutzung des any-Elements und des anyAttributes führt auch nicht zu einer befriedigenden Lösung
    Hier ein exemplarisches Beispiel: Die jeweils unbekannten (variierende) Elemente sind fett und blau dargestellt. Für eine Hilfe, am Besten in Form einer XSD-Beispiels wäre ich sehr dankbar.

    <parameter>
    <device>
    <dev1 x= "0.0" bitrate = "2400" />
    <dev2 x= "0.0" bitrate = "2400" />
    </device>
    <software>
    <sw1>
    <sw-produkt legal = "true" />
    <sw-nr nummer = "1000" />
    </sw1>
    <sw2>
    <sw-produkt legal = "true" />
    <sw-nr nummer = "1000" />
    </sw2>
    </software>
    </parameter>


    Danke im Vorraus

  • #2
    Hallo winni,

    hast du eine Lösung auf dein Problem gefunden? Stehe gerade vor einem ähnlichen Problem, dass ich meine Thematik nicht mit einem Schema zufriedenstellend darstellen kann.
    Verwende wie du den Xercex-c Parser. Bei mir sieht die Thematik so aus, dass innerhalb eines „all“ Elements noch beliebig viele unbekannte Elemente an beliebiger Stelle zugelassen werden sollen.

    Beispiel meiner Thematik

    Das Schema:
    Code:
    <?xml version="1.0" encoding="utf-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    	<xs:element name="auto">
    		<xs:complexType>
    			<xs:all>
    				<xs:element name="audi" minOccurs="1" maxOccurs="1"/>	
    				<xs:element name="bmw" minOccurs="0" maxOccurs="1"/>
    				<xs:element name="opel" minOccurs="0" maxOccurs="1"/>
    			</xs:all>
    		</xs:complexType>
    	</xs:element>
    </xs:schema>
    Und eine Beispieldatei:

    Code:
    <?xml version="1.0" encoding="utf-8"?>
    <auto xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:noNamespaceSchemaLocation="XMLSchema2.xsd">
    	<audi></audi>
            <vw></vw>
    	<bmw></bmw>
    	<opel></opel>
    	<alfa></alfa>
    </auto>
    Hier das Problem die Elemente "vw" und "alfa" sind nicht erlaubt, sollten es aber sein, wie kann ich diese Problematik in einem Schema abblilden? Eine Sequenz stellt nicht das dar was ich benötige da die Reihenfolge der Elemente, wie oben beschreiben variabl sein soll.

    Würde mich über eine schnelle Antwort freuen

    Danke und viele Grüße
    SEK2003

    Comment


    • #3
      Hallo Zaungast.

      Tut mir wirklich leid dass ich mich jetzt erst melde. Ich hatte wegen anderen Arbeiten mein Schemataproblem zurückgestellt und war somit auch seit langem nicht mehr in diesem Forum.
      Ich habe leider keine befriedigende Lösung gefunden.
      Eine Möglichkeit gibt es aber, indem du dass "any-Element" mit local- Angabe benutzt und den "processContent" auf "lax" stellst.
      Eventuell ist deine Elementmenge sogar begrenzt (z.B nur alle Autotypen). Dann würde ich einfach die Schemadatei einfach um diese Elemente mit minoccurs = 0 ergänzen.
      Macht natürlich keinen Sinn falls die Elementnamen beliebig sein können.


      Vielle Grüße und nochmals Sorry

      Comment

      Working...
      X