2014-03-31 9 views
5

Ich wäre nicht hier, wenn ich mich nicht in Oblivion gegoogelt hätte. Ich habe das folgende Problem: Ich habe ein XML-Schema, 3 einzelne XML-Dokumente und ein XML-Dokument, um alle anderen zu verbinden 3. Ich renne in den folgenden Fehler und ich verstehe nicht warum.Versuch, XML-Dateien mit Xinclude-Attribut zu verbinden xml: Basisfehler

E [Xerces] cvc-complex-type.3.2.2: Das Attribut 'xml: base' darf nicht im Element 'SoftwareRequirementsDocument' erscheinen.

Ich habe eine Reihe von Forenbeiträgen von Google mit Menschen mit einem ähnlichen Problem gelesen, aber keine ihrer Fixes würde mir helfen. Ich werde mein Schema, 1 XML-Dokument, das verbunden werden soll, und das XML-Dokument mit XInclude veröffentlichen. Ich werde den Anfang jedes Dokuments so veröffentlichen, wie es benötigt wird. Hier

ist NotionalSchema2.xsd:

<xsd:element name="ProjectLifecycleDocuments" type="ProjectLifecycleDocumentsType"/> 
<xsd:complexType name="ProjectLifecycleDocumentsType"> 
    <xsd:choice minOccurs="0" maxOccurs="unbounded"> 
     <xsd:element ref="Team"/> 
     <xsd:element ref="SoftwareRequirementsDocument"/> 
     <xsd:element ref="UseCaseDocument"/> 
     <xsd:element ref="TestCaseDocument"/> 
    </xsd:choice> 
    <xsd:attribute name="id" use="required" type="xsd:ID"/> 
</xsd:complexType> 

<xsd:element name="SoftwareRequirementsDocument" type="SoftwareRequirementsDocumentType"/> 
<xsd:complexType name="SoftwareRequirementsDocumentType"> 
    <xsd:sequence> 
     <xsd:element ref="Section" maxOccurs="unbounded"/> 

     <!-- Other global elements to be referenced here. --> 
    </xsd:sequence> 
    <xsd:attribute name="projectName" use="required" type="xsd:string"/> 
    <!--<xsd:attribute name="id" use="required" type="xsd:ID"/>--> 
</xsd:complexType> 

Hier mein NotionalSRS2.xml ist:

<SoftwareRequirementsDocument projectName="Lifecycle Documents with Requirements 
Tracking" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:noNamespaceSchemaLocation="NotionalSchema2.xsd"  
xmlns:xx="http://apache.org/xml/features/xinclude/fixup-base-uris"> 

    <Section id="RQ1.0"> 

    <Title>Introduction</Title> 
    <Para>The Software Requirements Specification details the extent of NUWC’s Lifecycle Project Manager. The product’s main feature is it’s ability to create and manage lifecycle documents using a graphical user interface. The lifecycle documents will be organized and exported using an XML Schema. This can be accomplished by a user who has no knowledge of the XML language. This document will review all the basic functionality required for a user to edit, create, and manage lifecycle projects. 
    </Para>  
    </Section> 

    <Section id="RQ1.1"> 
     <Title>Purpose</Title> 
     <Para> To provide a detailed description of how the product will produce it’s lifecycle documents as well as edit and export them. It also overviews the basic functional requirements requested by the customer. 
     </Para> 
    </Section> 

Und hier ist meine Datei XInclude verwenden, ProjectLifecycleDocuments.xml:

<ProjectLifecycleDocuments id="PL1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-  
instance" xmlns:xi="http://www.w3.org/2001/XInclude" 
xsi:noNamespaceSchemaLocation="NotionalSchema2.xsd"> 
<xi:include href="NotionalSRS2.xml"/> 

</ProjectLifecycleDocuments> 

Jetzt lese ich viel über Namespace, wenn ich diesen Fehler suche, aber ich konnte nicht verstehe, wo ich falsch gelaufen bin.

Wenn Sie mir in die richtige Richtung zeigen könnten, warum dieser Fehler passiert und wie ich es beheben kann, wäre das großartig. Siehe

Antwort

5

Das xml:base Attribut (W3C XML Base wird von XInclude für die Einhaltung der Spezifikation hinzugefügt:.. http://xerces.apache.org/xerces2-j/faq-xinclude.html#faq-3

Die FAQ schlägt zwei Lösungen Einer von ihnen Sie erfordert das Einsetzen des xml:base Attribut zu deaktivieren, indem Sie eine Funktion eingestellt wird, wenn . Ausführen des Parsers die andere besteht Ihr Schema zur Konfiguration des xml:base Attribut in der mitgelieferten Art zu ermöglichen, die Sie durch den Import der XML XSD in Ihrem Schema tun können:

<xsd:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/03/xml.xsd" /> 

Und dann declari ng das Attribut mit einem Verweis auf xml:base:

<xsd:complexType name="SoftwareRequirementsDocumentType"> 
    <xsd:sequence> ... </xsd:sequence> 
    <xsd:attribute name="projectName" use="required" type="xsd:string"/> 
    <xsd:attribute ref="xml:base"/> 
    ... 
</xsd:complexType> 
+0

in Ihrem zweiten Link: „entsprechend der Spezifikation für XInclude, Prozessoren muss ein XML hinzuzufügen: Basisattribut-Elemente von Orten mit einer anderen Basis URI enthalten. Ohne diese Attribute wären die resultierenden Infoset-Informationen inkorrekt. "Was genau wird falsch, wenn das Einfügen von xml: base deaktiviert wird und wann wird es ein Problem? – Andreas

+0

Ich bin mir nicht sicher über einen falschen Teil, aber es würde es schwerer machen Introspektion von wo die Elemente herkommen, vielleicht eine gute Begründung für die Aufnahme dieses Meta-Attributs, wenn rekursive Includes angeboten werden. – ruffsl