Announcement

Collapse
No announcement yet.

xml:id-Attribut in Tags erzwingen

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

  • xml:id-Attribut in Tags erzwingen

    Hallo,

    ich habe ein Schema mit dem Namensraumpräfix pncl.
    Ich möchte mit diesem Schema für einige Tags aus pncl erzwingen das diese das Attribut xml:id besitzen.

    Ziel ist es folgenden Xml-Schnipsel zu validieren:
    HTML Code:
    <?xml version="1.0" encoding="utf-8"?>
    <PNCLParser xml:id="MainGrammar" version="1.0">
      <!-- ........... -->
    </PNCLParser>
    Hier meine bisherige pncl.xsd
    HTML Code:
    <?xml version="1.0" encoding="utf-8"?>
    <xsd:schema attributeFormDefault="unqualified"
                elementFormDefault="qualified"
                targetNamespace="http://xmlns.paebbels.eu/Library/1.0/PNCLParser"
                xmlns="http://xmlns.paebbels.eu/Library/1.0/PNCLParser"
                xmlns:xml="http://www.w3.org/XML/1998/namespace"
                xmlns:type="http://xmlns.paebbels.eu/Common/1.0/Types"
                xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    
      <xsd:import namespace="http://xmlns.paebbels.eu/Common/1.0/Types" />
      <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
    
      <xsd:element name="PNCLParser">
        <xsd:complexType>
          <xsd:choice maxOccurs="unbounded">
            <!-- ........... -->
          </xsd:choice>
          <xsd:attribute ref="xml:id" />
          <xsd:attributeGroup ref="type:AGversion" />
        </xsd:complexType>
      </xsd:element>
      <!-- ........... -->
    </xsd:schema>
    VisualStudio bietet mir automatisch für ref="" die Werte xml:base, xml:id, ... an.
    Jedoch wird dann nach dem Einfügen folgendes gemeldet:
    Warning - Errors occurred while compiling the Xml schemas in the project. Because of this, Xml intellisense is not available.

    Netterweise weiß der xsd-compiler nicht wo der Fehler ist ...
    Kommentiert man das Attribut xml:id aus, so gibt es keine Fehlermeldung

  • #2
    Hi,

    wenn du 'ref' benutzen möchtest, dann referenzierst du auf ein Attribut. Das gibt es aber bei dir nicht.

    Du kannst zwei Sachen machen: 1. du erstellst das Attribut (außerhalb von xsd:element) unr referenzierst es, oder du ersetzt 'ref' durch 'name' und erstellst somit das Attribut direkt da, wo es benötigt wird.
    Wenn es immer vorhanden sein soll, machst du noch ein 'use="required" dahinter.

    Comment


    • #3
      Hallo,

      danke für die Antwort; diese hat jedoch nicht weitergeholfen.

      Wie ich beschrieben habe und man im Quelltext sehen kann referenziere ich den Namensraum xml
      [...]
      xmlns:xml="http://www.w3.org/XML/1998/namespace"
      [...]

      und importiere diesen
      <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />

      dadurch ist es überhaupt erst möglich das mir VisualStudio per autovervollständigung für das ref-Attribut im Attribut-Tag den Eintrag "xml:id" anbietet.

      Dies ist auch soweit korrekt, da die implizite "Schemadefinition" von xml die globalen Attribute id, base, space und co exportiert.


      ----
      soweit ich es beurteilen kann ist es ein fehler im xsd-compiler von inline-xml/intelliscense, denn der normale xsd-compiler/syntaxchecker für xml files welche diese namensräume benutzen laufen ohne error.

      ich werde deswegen mal einen bugreport an microsoft senden

      Comment

      Working...
      X