2016-03-28 3 views
0

XML, JSON und YAML scheinen am besten zu funktionieren, für was sie entworfen wurden. Gibt es eine Möglichkeit, Scripting zuzulassen oder mindestens Funktionen innerhalb dieser Formate aufzurufen, die String-Werte zurückgeben und den Wert der Elemente in den Daten ändern?Data Interchange Format mit Skriptoptionen

Lange Rede, kurzer Sinn: Gibt es ein Data Interchange Format, das das Scripting oder den Aufruf von Funktionen durch Übergabe von Argumenten erlaubt?

Wenn es keine gibt, gibt es eine plausible/Standard-Syntax, die man innerhalb dieser Formate verwenden kann, um Funktionen zur Laufzeit aufzurufen?

XML Beispiel: <Element>$Method("My name is Jeff");<Element>

+0

Scheint wie eine seltsame Frage für mich, könnten Sie in Xsl-Transformationen zu XML transformieren. Sie können einige Funktionen in den Transformationen aufrufen. – Derek

Antwort

1

Die Antwort auf Ihre erste Frage lautet: Nein. Zum zweiten "Ja, es gibt eine plausible Syntax für XML und YAML"

Dies sind Datenformate und das ist was sie angeben, mit XML und YAML viel mächtiger als JSON. Selbst JSON ist Programmiersprache agnostisch, und darüber hinaus gibt es in den Spezifikationen nichts, was die Art wäre, eine Funktion zu definieren, die ausgewertet werden kann.

Natürlich ist es einfach, etwas in XML und YAML (jeder auf seine eigene Weise) zu markieren. Sie schreiben einfach ein Programm, das das Tag beim Parsen auswertet und die Ausgabe erzeugt (aus dem String/Skalar/Complex-Typ). Das beantwortet sofort die Frage, die Sie sich selbst nicht gestellt zu haben scheinen: "In welcher Sprache wird die auszuwertende 'Zeichenkette' geschrieben?", Für die die Antwort lautet: "Welche Skriptsprache Sie auch in Ihrem Programm verwenden, um die markierte Daten "

Von einem Python-YAML-Parser ist es trivial, den Python-Interpreter aufzurufen, die Auswertung durchzuführen. Aus einer kompilierten Programmiersprache müssen Sie entweder eine Skripterweiterung aufrufen oder einen Evaluator in Ihr Programm einbauen lassen. Sie können natürlich auch durch Kompilieren und dynamisches Laden auswerten, aber das ist wahrscheinlich schwieriger als eine vorhandene skriptfähige Sprache zu verwenden.

Ihr Beispiel scheint Interpretation eines Wertes basierend auf einem Muster zu verwenden (beginnend mit einem $, mit einem $ irgendwo in der Zeichenfolge). Das ist der falsche Weg, dies zu tun, da Sie jede einzelne Zeichenfolge analysieren und einen Escape-Mechanismus bereitstellen müssen, um eine tatsächliche $ zu schreiben. Es ist viel besser, Tagging/Attribute zu verwenden, um dem Parser tatsächlich zu zeigen, dass spezielle Anforderungen erfüllt werden müssen.

+0

Danke Anthon, das erklärt alles für mich. – AmatuerDev