1

初めて、自分のXMLを検証するためのXMLスキーマを作成しようとしています。

XMLの開始(通知" -instance"および" SectionNumber="0""):

<?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 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スキーマから""を削除すると、上記のエラーは削除されますが、属性" <xsi:attribute name="SectionNumber" type="xsi:Integer"/>"のコードを使用できません。

私の本当の問題がその-instance一部なのか、それともスキーマに属性を書き込む/含める別の方法があるのか​​さえわかりません。どうすればこれを解決できますか?

4

2 に答える 2

1

2つの名前空間を混同しています:XMLSchemaXMLSchema-instance。これら2つは異なる目的を果たし、スキーマを宣言するために使用されますXMLSchema(通常はプレフィックス付き)。そのため、XSDファイルはそれなしでは機能しません。xs

名前空間XMLSchema-instance(通常はプレフィックス付きxsi)は、ドキュメントでXMLスキーマを使用する場合に使用されます。たとえば、schemaLocationプレフィックスはこの名前空間にあります。

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

また、要素の順序が正しくありません。<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。これは理にかなっているためですが、技術的には必要ありません。

于 2012-04-20T10:13:23.020 に答える
0

うーん、私はこれを見つけました:

w3へのリンク

「このスキーマをそのまま使用しないでください。XMLスキーマの推奨事項では、この名前空間での属性の宣言は禁止されています。」

そのときはXMLを変更する必要があるため、問題が発生していると思います。問題は、XMLが私たちが持っている古いプログラムから生成されることです。誰かが私が解決策を見つけたことを確認する/確認しないことができますか、そうでなければ私は他の誰かの答えを評価しますか?

于 2012-04-20T09:43:49.900 に答える