2012-04-08 8 views
0

Mein Verständnis von XML ist nicht gerade atemberaubend, aber mein Verständnis von Inhalt in Annotation/Appinfo ist, dass Sie jede wohlgeformte XML erlaubt, und dies ist lax validiert. Mein Verständnis der laxen Validierung ist, dass Elemente und Attribute validiert werden, wenn die relevanten Schemainformationen erhalten werden können.Validieren von XML-Inhalten in XML-Schema Annotation/Appinfo

Meine Situation ist, dass ich ein XML-Schema mit Inhalt in diesem Abschnitt habe, die Validierung erfordert. Ich habe die relevanten Schemas, um den Inhalt zu validieren.

Ich habe ein völlig einfaches XML Schema genommen und ein appinfo Element hinzugefügt, wie unten gezeigt. Der Inhalt von appinfo ist eine weitere Elementdeklaration, um der Einfachheit halber nicht auf ein anderes Schema zu verweisen. Das Schema, das ich zu validieren versuche, bezieht sich offensichtlich auf etwas anderes.

<?xml version="1.0"?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
     targetNamespace="http://www.demo.org" 
     xmlns="http://www.demo.org" 
     elementFormDefault="qualified"> 
<xsd:annotation> 
    <xsd:appinfo> 
     <xsd:element name="Demo"> 
      <xsd:complexType> 
       <xsd:sequence> 
        <xsd:element name="A" type="xsd:iteger"/> 
        <xsd:element name="B" type="xsd:integer"/> 
       </xsd:sequence> 
      </xsd:complexType> 
     </xsd:element>  
    </xsd:appinfo> 
</xsd:annotation> 
<xsd:element name="Demo"> 
    <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element name="A" type="xsd:integer"/> 
      <xsd:element name="B" type="xsd:integer"/> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 

Hinweis im appinfo Abschnitt, habe ich absichtlich falsch geschrieben „integer“ auf Element A. Wenn ich dies in dem Hauptkörper des Schemas tue, dann XmlSchemaSet.Compile() mir dieses Schema erzählen ist nicht gültig.

Wenn ich jedoch das Schema wie oben beschrieben benutze, sagt es mir, dass es kein Problem gibt. In der komplexeren Datei mit Ich begann, lieferte ich die externe Schema XmlSchemaSet über XmlSchemaSet.Add()

Ich habe auch das XML-Schema aus http://www.w3.org/2001/XMLSchema.xsd und Laden des Schemas in ein XmlDocument validiert zu werden versucht zu laden und laufen XmlDocument.Validate() aber keine Freude.

Ich habe das Gefühl, dass ich total fundamentale Dinge verpasse, nachdem ich Stunden damit verbracht habe. Irgendwelche Hinweise geschätzt! Diese

Antwort

0

ist nicht mein Verständnis von lax: Wenn Sie eine Erklärung haben

<any 
    namespace=". . . " 
    processContents="lax"> 
</any> 

der Inhalt des entsprechenden Elements in der XML wird gegen die Schemata validiert werden validiert mit dem Namensraum entspricht (en) angegeben durch namespace (falls vorhanden) - nicht gegen irgendein Schema, das es benutzt. Die Erklärung für die appInfo ist

<xs:element name="appinfo" id="appinfo"> 
    <xs:complexType mixed="true"> 
    <xs:sequence minOccurs="0" maxOccurs="unbounded"> 
     <xs:any processContents="lax"/> 
    </xs:sequence> 
    <xs:attribute name="source" type="xs:anyURI"/> 
    <xs:anyAttribute namespace="##other" processContents="lax"/> 
    </xs:complexType> 
</xs:element> 

ohne namespace Spezifikation, die zu namespace="##any" entspricht, das heißt, dass es keine Validierung gegen jedes Schema ist.