XML/DTD: Kontextfreiheit?

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
matott

Edit (Leonidas): Vom Anfangsthread "Eigene "config" Dateien gescheid parsen." getrennt.

Sowieso würde ich mal überdenken, ob deine Sprache regular ist oder context-free. Denn normalerweise ist XML context-free und du brauchst sowas wie z.B. einen LR- oder LL-Parser (gibt auch noch andere Typen).

Edit (Leonidas): Vom Anfangsthread "Eigene "config" Dateien gescheid parsen." getrennt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

matott hat geschrieben:Sowieso würde ich mal überdenken, ob deine Sprache regular ist oder context-free. Denn normalerweise ist XML context-free und du brauchst sowas wie z.B. einen LR- oder LL-Parser (gibt auch noch andere Typen).
Hallo matott!

Nett dass du antwortest, aber was könnte dem Fragesteller deine Antwort bringen, außer zu verwirren?

mfg
Gerold
:-)

PS: Meine Antwort bringt dem Fragesteller natürlich auch nichts...
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

gerold hat geschrieben:
matott hat geschrieben:Sowieso würde ich mal überdenken, ob deine Sprache regular ist oder context-free. Denn normalerweise ist XML context-free und du brauchst sowas wie z.B. einen LR- oder LL-Parser (gibt auch noch andere Typen).
Hallo matott!

Nett dass du antwortest, aber was könnte dem Fragesteller deine Antwort bringen, außer zu verwirren?

mfg
Gerold
:-)

PS: Meine Antwort bringt dem Fragesteller natürlich auch nichts...
Ich empfinde seine Antwort als garnicht so unpassend. Es ist nunmal so, dass XML eigentlich Kontextfrei ist und man dementsprechend (eigentlich) nen speziellen Parser braeuchte...

Aber zum Glueck haben wir ja BeautifulStoneSoup ;)
Damit kannst du ziemlich bequem XML parsen.
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

@akis.kapo, hat es einen hintergrund, warum du keinen fertigen parser nutzen möchtest?


@rest
Es ist nunmal so, dass XML eigentlich Kontextfrei ist und man dementsprechend (eigentlich) nen speziellen Parser braeuchte...
sicher, aber was bringt das jmd, der ganz offensichtlich noch nie was von formalen sprachen gehört hat.

btw ist xml exteded CF ... :shock:
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Dill hat geschrieben:@akis.kapo, hat es einen hintergrund, warum du keinen fertigen parser nutzen möchtest?


@rest
Es ist nunmal so, dass XML eigentlich Kontextfrei ist und man dementsprechend (eigentlich) nen speziellen Parser braeuchte...
sicher, aber was bringt das jmd, der ganz offensichtlich noch nie was von formalen sprachen gehört hat.

btw ist xml exteded CF ... :shock:
Ja damit hast du auch wieder recht ...also ich bleib bei BeautifulSoup ;)
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
matott

Na ja, ok, wenn ihr meint:
Formale Sprachen in a Nutshell
So, bezogen auf dein Beispiel akis.kapo:
Wenn du versuchsts z.B. die Elemente in einander zu "verschachteln",

Code: Alles auswählen

<item>
  <item>
  </item>
</item>
dann musst du das ja in deiner Regular Expression angeben, d.h. für jedes "Verschachtelungslevel" musst die RegEx erweitern, da RegEx nicht rekursiv sind.

Code: Alles auswählen

item[1]: text | (item[2])+;
item[2]: text | (item[3])+;
[..]
item[n]: text | (item[n+1])+;
Context-free sieht das dann so aus:

Code: Alles auswählen

item: text | item+;
Somit sind nur kann man die Sprache, die du für deine Config benutzt nur context-free ausdrücken.

Ich hoffe jetzt ist es klar, denn es ist wichtig ordentliches Parsing zu beherrschen. Zum Glück gibt es ja heute sehr viele Tools, die einem dabei helfen :).
BlackJack

XML ist übrigens *nicht* kontextfrei. Das bringt dem OP natürlich auch nichts. :-)
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

XML ist übrigens *nicht* kontextfrei. Das bringt dem OP natürlich auch nichts.
XML ist (erweitert) kontextfrei. alles andere wäre mir neu.

was soll es denn sonst sein?
BlackJack

Was ist "erweitert kontextfrei"? Formal ist XML kontextsensitiv.
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

ich bin in dem thema nicht sondernlich fit, aber die Grammatik eines XML-doc ist eine DTD.
Und eine DTD ist kontextfrei.
genauer, sie ist erweitert kontextfrei, da auf der rechten seite RE stehen können.
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Ich teile BlackJacks Aussage... Chomsky laesst gruessen ^^
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

so, jetzt habe ich mal etwas rumgesucht:

http://coding.derkeiler.com/Archive/Gen ... /0159.html

http://lrb.cs.uni-dortmund.de/~tick/Talks/xmld.pdf


das schöne ist, irgendwie haben wir alle recht :wink:
matott

Du kannst XML, aber auch mit YACC o.ä. parsen, wenn du dir den Context "merkst", dann ist es aber auch wieder irgendwie kontextsensitiv. Aber wenn man so argumentiert kann man auch per Stack unendlich viele Reguläre Parser in einer verschachteln, wenn sie sich beim Abstieg immer weiter aufrufen und verschachteln.
Siehe: http://laramies.com/ragel/json/
Für ECF siehe: http://tack.sourceforge.net/doc/LLgen.html
BlackJack

@Dill: Ich bleibe dabei das XML nicht kontextfrei ist.

Die Hinzunahme einer DTD hilft dagegen nicht, also eine neue Sprache deren Worte XML *und* der DTD genügen, ist auch nicht kontextfrei.

Da gibt es immer noch Entities und Refrenzen. Zum Beispiel müssen Entities deklariert werden, bevor man sie benutzt und rekursive Entities sind nicht erlaubt.

Wenn ein Attribut vom Typ `ID` ist, darf der Wert nur einmal im Dokument vorkommen. Wenn ein Attribut vom Typ `IDREF` ist, muss der Wert im Dokument als `ID` vorkommen. Diese beiden Regeln kommen erst durch DTDs oder ähnliche Spezifizierungen hinzu!

Zu "erweitert kontextfrei": Das ist auf die Sprache bezogen das gleiche wie "kontextfrei", denn es geht sowohl in dem PDF-Dokument, als auch in der LLgen-Dokumentation um die *Notation* der kontextfreien Grammatik, nicht um die *Sprache* die davon erkannt werden kann. Der Satz "XML ist erweitert kontextfrei" ergibt vor dem Hintergrund keinen Sinn.
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

BlackJack hat geschrieben:Was ist "erweitert kontextfrei"? Formal ist XML kontextsensitiv.
Erstmal vorweg, ich stecke in dem Thema nicht genug drin, aber soviel hab ich mir schon angelesen und stimme daher mit BlackJack überein.

1. Erstmal gibt es sowas wie erweitert kontextfrei nicht in der Chomsky-Hierarchie.

2. XML, HTML und ähnliches ist nicht vollständig Type-2 (kontextfrei Grammatiken) aber lässt sich mit auch nicht vollständig mit Type-3 (reguläre Grammatiken) beschreiben (Bestimmte Verschachtelungen sind für regExp "nicht" zu lösen (wie man es z.B. bei BBCode hat), wo bestimmte Verschachtelungen von Typen nicht erlaubt sind.)

3. XML, HTML sind nicht Turingtauglich. Type-2 sind Turingtauglich bzw. mit Kellerautomaten mit zwei Kellerspeichern (Was gleich mächtig mit einer Turingmaschine ist). Z.B. gibt es keine Kontrollstrukturen in Markup-/Beschreibungssprachen und auch keine schleifen. Alles Voraussetzungen um sich Type-2 auf der Chomsky-Hierarchie schimpfen zu lassen.


BTW: Bin kein Informatiker. Wenn etwas nicht stimmt in meinem Post, dan stellt das bitte klar.
matott

sape hat geschrieben: 2. XML, HTML und ähnliches ist nicht vollständig Type-2 (kontextfrei Grammatiken) aber lässt sich mit auch nicht vollständig mit Type-3 (reguläre Grammatiken) beschreiben (Bestimmte Verschachtelungen sind für regExp "nicht" zu lösen (wie man es z.B. bei BBCode hat), wo bestimmte Verschachtelungen von Typen nicht erlaubt sind.)
Ich glaube die Leute unterhalten sich eher über DTDs, als XML. Aber deine Argumentation habe ich ja auch schon so ähnlich vorgetragen.
sape hat geschrieben: 3. XML, HTML sind nicht Turingtauglich. Type-2 sind Turingtauglich bzw. mit Kellerautomaten mit zwei Kellerspeichern (Was gleich mächtig mit einer Turingmaschine ist). Z.B. gibt es keine Kontrollstrukturen in Markup-/Beschreibungssprachen und auch keine schleifen. Alles Voraussetzungen um sich Type-2 auf der Chomsky-Hierarchie schimpfen zu lassen.
Guter Argumentationsleitfaden.

Vielleicht könnte das was bringen: http://en.wikipedia.org/wiki/Pumping_lemma
Dieser eine Typ (http://coding.derkeiler.com/Archive/Gen ... /0159.html) zeigt es damit ja auch.
sape hat geschrieben: BTW: Bin kein Informatiker. Wenn etwas nicht stimmt in meinem Post, dan stellt das bitte klar.
Ich auch nicht, aber ich bin auch noch schlecht im Beweisen ;).
BlackJack

Der Beweis, der davon ausgeht, dass man schon bewiesen hat, dass Sprachen der Form `wⁿxwⁿ` nicht kontextfrei sind, ist etwas einfacher als das Pumping-Lemma.
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

Es geht hier doch ums parsen.
XML wurde designed mit dem vorsatz, es im gegensatz zu SGML vernünftig parsen zu können.
Aus sicht des parsers ist XML kontextfrei.
Wenn ein Attribut vom Typ `ID` ist, darf der Wert nur einmal im Dokument vorkommen. Wenn ein Attribut vom Typ `IDREF` ist, muss der Wert im Dokument als `ID` vorkommen.
das zb interessiert den parser nicht.
wird in ebenen über dem parser behandelt.

siehe hier:
http://coding.derkeiler.com/Archive/Gen ... /0169.html
BlackJack

@Dill: Das ist alles schön und gut, macht aber die Aussage XML sei kontextfrei nicht wahr. Man kann für XML keine kontextfreie Grammatik angeben.

Man kann natürlich eine syntaktische Analyse auf Basis einer kontextfreien Grammatik, die eine Obermenge von XML-Dokumenten erkennt, in die Analysephase einbetten. Wie man das bei den meisten Programmiersprachen auch macht. Bekannteste/verbreiteste Ausnahme ist wohl Perl. :-)
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

formale sprachen dienen der informatik nicht, weil sie so wunderschöne theoretische konstrukte sind, sondern weil sie den bau von parsern und damit compilern enorm erleichtern.

daher ist es absolut in ordnung sprachen aus der sicht des parsers zu bewerten.
so habe ich es jedenfalls gelernt und bleibe dabei :)
Welchen Sinn hat denn XML für deine Konfig-Datei?
Zum menschlichen Editieren finde ich traditionelle unixmäßige Dateien wesentlich entspannter.
es gibt einige leute die das anders sehen, zb solche die nicht (nur) auf/für unixen arbeiten.
Antworten