Sonntag, April 5, 2020

XML-Validierung Nicht übereinstimmenden globalen Deklaration zur Verfügung, die für die Validierung root

Ich habe ein XML-schema zur Verfügung gestellt von Cisco Systems für ein IOS-XE-router. Beim ausführen des Befehls „show ip access-list test | format“ in der router cli, es spuckt ein XML-fragment, das sollte Validierung gegen das schema. Aber es geht nicht. Stattdessen bekomme ich die Fehlermeldung „: Keinen passenden global-Deklaration stehen für die Validierung root“

Schema zur Verfügung gestellt von Cisco extrahiert, durch ausführen von ’show xsd-format cli show ip access-lists“, wie hier empfohlen http://www.cisco.com/c/en/us/td/docs/ios-xml/ios/xmlpi/command/xmlpi-cr-book/xmlpi-cr-p1.html#GUID-33CB3BAB-25B4-4FAD-9741-C7AFB483F701 ist unten dargestellt:

<?xml version="1.0" encoding="UTF-8"?>
  <xsd:schema elementFormDefault="qualified" attributeFormDefault="unqualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
    <xsd:complexType name="ShowAccesslists_def">
      <xsd:sequence>
        <xsd:element ref="SpecVersion" minOccurs="0" />
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Info" />
          <xsd:element name="Access-List" minOccurs="0" maxOccurs="1">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="Type" minOccurs="0" maxOccurs="1" type="xsd:string" />
                <xsd:element name="Name" minOccurs="0" maxOccurs="1" type="xsd:string" />
                <xsd:element name="DenyFilter" minOccurs="0" maxOccurs="1">
                  <xsd:complexType>
                    <xsd:sequence>
                      <xsd:element name="Filter" minOccurs="0" maxOccurs="1" type="xsd:string" />
                    </xsd:sequence>
                  </xsd:complexType>
                </xsd:element>
                <xsd:element name="PermitFilter" minOccurs="0" maxOccurs="1">
                  <xsd:complexType>
                    <xsd:sequence>
                      <xsd:element name="Filter" minOccurs="0" maxOccurs="1" type="xsd:string" />
                    </xsd:sequence>
                  </xsd:complexType>
                </xsd:element>
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:sequence>
    </xsd:complexType>
    <xsd:element name="SpecVersion" type="xsd:string" />
    <xsd:element name="Info" type="xsd:string" />
    <xsd:element name="ShowAccesslists" type="ShowAccesslists_def" />
  </xsd:schema>

Das XML-fragment der router ausspuckt ist:

<?xml version="1.0" encoding="UTF-8"?>
   <ShowAccesslists xmlns="ODM://built-in//show_access-lists">
    <Access-List>
      <Type>Extended IP</Type>
      <Name>test</Name>
      <PermitFilter>
        <Filter>10 permit ip any any</Filter>
      </PermitFilter>
      <PermitFilter>
        <Filter>20 permit tcp 0.0.0.1 255.255.255.0 any</Filter>
      </PermitFilter>
      <PermitFilter>
        <Filter>40 permit tcp host 10.22.1.128 10.11.79.0 0.0.0.255 eq domain</Filter>
      </PermitFilter>
      <PermitFilter>
        <Filter>50 permit tcp host 10.22.1.128 eq domain 10.11.79.0 0.0.0.255</Filter>
      </PermitFilter>
    </Access-List>
  </ShowAccesslists>

Ist das schema gebrochen? Wie bekomme ich es überprüfen?

InformationsquelleAutor Chris | 2017-04-07

1 Kommentar

  1. 4

    Antwort hängt davon ab, ob Sie möchten, ändern Sie Ihre XML-oder des XSD -…

    Ändern XML –

    Entsprechend Ihrer XSD -, XML sollte sich nicht in einen namespace und sollten nicht mehrere PermitFilter Elemente.

    Deshalb, wenn Sie möchten, halten Sie die XSD-Konstante, die folgenden aktualisierten XML-Validierung erfolgreich gegen Ihre XSD.

    <?xml version="1.0" encoding="UTF-8"?>
    <ShowAccesslists>
      <Access-List>
        <Type>Extended IP</Type>
        <Name>test</Name>
        <PermitFilter>
          <Filter>10 permit ip any any</Filter>
        </PermitFilter>
      </Access-List>
    </ShowAccesslists>

    Ändern XSD

    Ihre XML-namespace und hat mehrere PermitFilter Elemente.

    Wenn Sie möchten, halten Sie die XML-Konstante, fügen Sie ein targetNamespace um Ihre XSD-Definition eines namespace-Präfix für diesen namespace, und verwenden Sie das Präfix der Referenzierung von Komponenten in diesem namespace. Die folgende aktualisierte XSD-zeigt genau an, wie Sie dies tun und erfolgreich validieren Sie Ihre XML:

    <?xml version="1.0" encoding="UTF-8"?>
    <xsd:schema elementFormDefault="qualified" attributeFormDefault="unqualified" 
                xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
                xmlns:sal="ODM://built-in//show_access-lists" 
                targetNamespace="ODM://built-in//show_access-lists">
      <xsd:complexType name="ShowAccesslists_def">
        <xsd:sequence>
          <xsd:element ref="sal:SpecVersion" minOccurs="0" />
          <xsd:choice minOccurs="0" maxOccurs="unbounded">
            <xsd:element ref="sal:Info" />
            <xsd:element name="Access-List" minOccurs="0" maxOccurs="1">
              <xsd:complexType>
                <xsd:sequence>
                  <xsd:element name="Type" minOccurs="0" maxOccurs="1" type="xsd:string" />
                  <xsd:element name="Name" minOccurs="0" maxOccurs="1" type="xsd:string" />
                  <xsd:element name="DenyFilter" minOccurs="0" maxOccurs="1">
                    <xsd:complexType>
                      <xsd:sequence>
                        <xsd:element name="Filter" minOccurs="0" maxOccurs="1" type="xsd:string" />
                      </xsd:sequence>
                    </xsd:complexType>
                  </xsd:element>
                  <xsd:element name="PermitFilter" minOccurs="0" maxOccurs="unbounded">
                    <xsd:complexType>
                      <xsd:sequence>
                        <xsd:element name="Filter" minOccurs="0" maxOccurs="1" type="xsd:string" />
                      </xsd:sequence>
                    </xsd:complexType>
                  </xsd:element>
                </xsd:sequence>
              </xsd:complexType>
            </xsd:element>
          </xsd:choice>
        </xsd:sequence>
      </xsd:complexType>
      <xsd:element name="SpecVersion" type="xsd:string" />
      <xsd:element name="Info" type="xsd:string" />
      <xsd:element name="ShowAccesslists" type="sal:ShowAccesslists_def" />
    </xsd:schema>
    • Was muss ich hinzufügen, um das schema zu machen und den ursprünglichen XML-fragment zu validieren? Offensichtlich zu beheben, die mehrere PermitFilter es sollte macOccurs=“unbounded“ aber ich weiß nicht, wie fügen Sie den namespace. Das XML-fragment scheint immer wieder zu kommen, mit dem namespace.
    • Antwort aktualisiert-jetzt zeigt Ihnen, wie Sie XML – oder wie ändern XSD für eine erfolgreiche Validierung.
    • Für jemand, der stößt auf diese, so scheint es, dass die XML-IO-XE-Router produzieren mit dem ‚format‘ – CLI-Befehl doe nicht validiert gegen XSD-Cisco bietet.

Kostenlose Online-Tests