2009-04-27 6 views
1

Wir verwenden XML, um ein Schema zum Steuern der Inhalte zu definieren, das in einem Diagrammwerkzeug angezeigt werden kann. Die Schemadatei gibt an, welche Arten von Objekten auf dem Diagramm platziert werden können, wie sie miteinander verknüpft werden können und welche Eigenschaften diese Objekte haben (dh welche einstellbaren Eigenschaften im Editor vorhanden sind).xml: ist mehrere Level! ENTITY-Nutzung möglich?

Wenn eine neue Art von Diagramm benötigt wird, wird ein neues Schema geschrieben und gegen eine .xsd validiert. Um die Schemadatei modularer und einfacher zu verwalten, verwenden wir Deklarationen, um separate Dateien hinzuzufügen. Listen von Eigenschaften usw., die zu einem bestimmten Diagrammelement gehören, aber an mehreren Stellen im Schema vorkommen können, werden in eine separate XML-Datei geschrieben und dann an der entsprechenden Stelle eingebunden. Sprich:

<!-- Nameing etc. just as an example --> 
<!ENTITY CommonProerties1 SYSTEM "file:../CommonProperties1.xml"> 
<!ENTITY CommonProerties2 SYSTEM "file:../CommonProperties2.xml"> 

und dann irgendwo im Schema:

<Node shape="Square"> 
    &CommonProperties1; 
    <!-- Specific properties go here --> 
</Node> 

Dieses viel Kopie pated Sachen verhindert, die schwierig macht, beibehalten wird, und lässt commmpn Eigenschaften auch mit mehreren Schemas gemeinsam genutzt werden.

Das Problem ist, dass jetzt einige der gemeinsamen Eigenschaften auch Basiselemente, wie Gruppen von Flags und Enums etc. Ich möchte jede Datei (wie "CommonProperties1.xml") aus, in der Lage sein, aufzunehmen eine andere Basismenge wie "CommonEnums.xml", aber ich denke nicht, dass dies mit! ENTITY-Deklarationen möglich ist.

Sie können keine! ENTITY außerhalb eines! DOCTYPE-Headers deklarieren, und wenn Sie den Header hinzufügen, wird die oberste XML-Datei ungültig, da sie eine Header-Deklaration 1.2 durch die Datei erhält.

Hat schon einmal jemand versucht, ähnliche Dinge zu tun, und was haben Sie getan, um das Problem zu lösen? Gibt es eine bessere Option, die ich vermisse?

Beifall für jede Hilfe,

xan

Antwort

3

Allgemeine Systemeinheiten entwickelt wurden als Text verwendet werden, umfassen/Ersatz-Mechanismus. Ich habe tief verschachtelte Strukturen mit einer großen Komplexität gesehen.

Also lassen Sie uns ein wenig tiefer in Ihre Problemstellung eintauchen.

In Ihrem Beispiel, warum glauben Sie, dass Sie nicht eine! ENTITY-Deklaration für CommonEnums in der Deklaration des Dokumenttyps haben, so dass die Entität Referenz & CommonEnums würde erkannt werden, wenn die enthaltende Entität analysiert wird? Was ist das Besondere an diesen Systemeinheiten, bei denen Sie Probleme haben, diese zu deklarieren? Wenn Sie vermeiden wollen, dass Sie sie während der Analyse des Dokumentprologs deklarieren müssen, dann können Sie das nicht umgehen.

Sie ein nicht erklären kann! ENTITY außerhalb eines Kopfes DOCTYPE!

Dies ist in gewisser Hinsicht wahr, aber es ist eine nützliche Lücke. Sie können allgemeine Entitäten in einer externen DTD deklarieren. In diesem Fall ist ihre Deklaration im Dokumentprolog nicht sichtbar. Ich weiß nicht, ob dies in Ihrer Situation hilfreich ist, aber Ihre externen allgemeinen Systemeinheiten in einer DTD zu deklarieren, würde es Ihnen ermöglichen, sie vor Dokumenteninstanzen und Fragmenten zu verbergen, die auf sie verweisen.

Wenn ich vermute, Ihre Ziele sind Wiederverwendbarkeit, Modularität und Kürze, dann denke ich, dass Sie tun können, was Sie wollen, mittels einer externen DTD. Aber um dieses Feature zu nutzen, müssen Sie möglicherweise die gesamte Arbeit an der Erstellung einer DTD mehr oder weniger in dem Umfang übernehmen, der erforderlich ist, um Ihren XML-Prozessor zu befriedigen, der wahrscheinlich darauf bestehen wird, Ihre Dokumentstrukturen gegen die DTD zu validieren.

+0

Nicht möglich zu tun, was wir uns erhofft hatten, danke für Ihren Rat. – xan