2012-04-20 6 views
1

私は初めて自分のXMLを検証するためにXMLスキーマを作ろうとしています。XMLスキーマに属性を含めることはできません。 (http://www.w3.org/2001/XMLSchema-instance used)

<?xml version="1.0" encoding="utf-8"?> 
<CrystalReport 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="urn:crystal-reports:schemas:report-detail 
        http://www.businessobjects.com/products/xml/CR2008Schema.xsd" 
    xmlns="urn:crystal-reports:schemas:report-detail" 
> 

    <ReportHeader> 
    <Section SectionNumber="0"> 
     <Text Name="Text9"> 
     ... 

私のXMLスキーマ(お知らせライン2、3及び20)::私のXML(お知らせ "-instance" と "SectionNumber="0"")の

スタート

<?xml version="1.0" encoding="utf-8"?> 
<xsi:schema id="XMLSchema_varslings1" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="urn:crystal-reports:schemas:report-detail" 
    elementFormDefault="qualified" 
    targetNamespace="urn:crystal-reports:schemas:report-detail"> 

    <xsi:element name="CrystalReport" type="CrystalReportType"/> 

    <xsi:complexType name="CrystalReportType"> 
     <xsi:sequence maxOccurs="unbounded"> 
      <xsi:element name="ReportHeader" type="ReportHeaderType"/> 
     </xsi:sequence> 
    </xsi:complexType> 

    <xsi:complexType name="ReportHeaderType"> 
     <xsi:sequence> 
      <xsi:element name="Section" type="SectionType"/> 
      <!-- This is line 19....................................... --> 
      <xsi:attribute name="SectionNumber" type="xsi:Integer"/> 
     </xsi:sequence> 
    </xsi:complexType> 

    <xsi:complexType name="SectionType"> 
     <xsi:sequence maxOccurs="unbounded"> 
      <xsi:element name="Text" type="TextType" /> 
     </xsi:sequence> 
    </xsi:complexType> 

    <xsi:complexType name="TextType"> 
     <xsi:sequence maxOccurs="unbounded"> 
      <xsi:element name="TextValue" type="xsi:string" /> 
     </xsi:sequence> 
    </xsi:complexType> 
</xsi:schema> 

は、私はこのエラーを取得します私は解決できません: "The root element of a W3C XML Schema should be <schema> and its namespace should be 'http://www.w3.org/2001/XMLSchema'."

"-instance"をスキーマから削除すると、私はboveエラーが発生しましたが、属性「<xsi:attribute name="SectionNumber" type="xsi:Integer"/>」のコードを使用できません。

私の実際の問題が-instance部分であるかどうかわからない、またはスキーマに属性を書き込む/含める別の方法があります。これをどうすれば解決できますか?

答えて

1

あなたは2つの名前空間:XMLSchemaXMLSchema-instanceを混同しています。これらの2つの目的は、XMLSchema(通常は接頭辞xs)を使用してに、と宣言しています。そのため、XSDファイルがなければXSDファイルは機能しません。

には、文書内の一部のXMLスキーマを使用するために、名前空間XMLSchema-instance(通常は接頭辞xsi)が使用されます。たとえば、接頭辞schemaLocationはこの名前空間にあります。

タイプinteger(小文字はi)は名前空間にありますので、そのまま使用する必要があります。

また、要素の順序が間違っています。 <xs:attribute><xs:sequence>より後になります。

だから、あなたのスキーマは次のようになります。

<xs:schema id="XMLSchema_varslings1" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns="urn:crystal-reports:schemas:report-detail" 
    elementFormDefault="qualified" 
    targetNamespace="urn:crystal-reports:schemas:report-detail"> 

    … 

    <xs:complexType name="ReportHeaderType"> 
    <xs:sequence> 
     <xs:element name="Section" type="SectionType"/> 
    </xs:sequence> 
    <xs:attribute name="SectionNumber" type="xs:integer"/> 
    </xs:complexType> 

</xs:schema> 

を、それが理にかなっているので、私はまた、xsに名前空間接頭辞を変更しましたが、技術的にそれは必要はありません。

+0

ありがとう、本当に良い答えです。それはセンスが大事です。接頭辞を 'ns'ではなく' xs'に変更したのでしょうか?すぐにテストを開始します。 – radbyx

+0

そうです、私は固定された 'xs'を意味しました。 – svick

+0

また、今私はhahaをしたように 'xs'を使っていて、' xsi'を使わなかったのは理にかなっています:) – radbyx

0

うーん、私はこれが見つかりました:私は、私は推測する

Link to w3

「XML Schema勧告は、この名前空間に属性の宣言を禁じこのスキーマは、そのまま使用してはいけませんが」私はその後XMLを変更する必要があるので、問題になります。問題は、XMLが古いプログラムから生成されていることです。誰かが私が解決策を見つけたかどうかを確認することができますか?

関連する問題