0

以下のスキーマ ファイルには、Stat拡張する要素がありますEntity。私が知る限り、私は w3 の例に従いますDocumentBuilderFactoryが、Javaを使用してスキーマ (およびスキーマを使用する xml) を解析すると、次のSchemaFactory例外が発生します。

org.xml.sax.SAXParseException; systemId: file:/schema/characterschema.xsd; 
    src-resolve.4.2: Error resolving component 'cg:Entity'. It was detected that
    'cg:Entity' is in namespace 'http://www.schemas.theliraeffect.com/chargen/entity',
    but components from this namespace are not referenceable from schema document
    'file:/home/andrew/QuasiWorkspace/CharacterGenerator/./schema/characterschema.xsd'.
    If this is the incorrect namespace, perhaps the prefix of 'cg:Entity' needs
    to be changed. If this is the correct namespace, then an appropriate 'import'
    tag should be added to '/schema/characterschema.xsd'.

そのため、スキーマ内に名前空間が表示されないようです。スキーマをそれ自体にインポートする必要がありますか、それともこの例外を完全に誤解していますか? スキーマを間違って宣言している可能性がありますか?

これは参照用の私のスキーマです:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:cg="http://www.schemas.theliraeffect.com/chargen/entity"
    elementFormDefault="qualified">

    <xs:element name="Entity">
        <xs:complexType>
            <xs:attribute name="id" type="xs:string" use="required"/>                    
            <xs:attribute name="name" type="xs:string"/>
            <xs:attribute name="description" type="xs:string"/>
        </xs:complexType>
    </xs:element>

    <xs:element name="Stat">
        <xs:complexType>
            <xs:complexContent>
                <xs:extension base="cg:Entity">
                    <xs:sequence>
                        <xs:element name="table" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>                        
                    </xs:sequence>
                </xs:extension>
            </xs:complexContent>
        </xs:complexType>
    </xs:element>
</xs:schema>
4

1 に答える 1

1

スキーマには 2 つの問題があります。まず、 a を宣言しないtargetNamespaceため、定義しているEntityandStat要素は名前空間にありません。次に、型は要素を拡張できず、別の型のみを拡張できます。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:cg="http://www.schemas.theliraeffect.com/chargen/entity"
    targetNamespace="http://www.schemas.theliraeffect.com/chargen/entity"
    elementFormDefault="qualified">

    <xs:complexType name="EntityType">
        <xs:attribute name="id" type="xs:string" use="required"/>                    
        <xs:attribute name="name" type="xs:string"/>
        <xs:attribute name="description" type="xs:string"/>
    </xs:complexType>

    <xs:element name="Entity" type="cg:EntityType" />


    <xs:complexType name="StatType">
        <xs:complexContent>
            <xs:extension base="cg:EntityType">
                <xs:sequence>
                    <xs:element name="table" type="xs:string" minOccurs="0"
                           maxOccurs="unbounded"/>                        
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:element name="Stat" type="cg:StatType" />
</xs:schema>

ここでは、一方が他方を拡張する 2 つの type と、それぞれの型の 2 つの最上位要素を定義ています。すべての最上位の型と要素はスキーマの に定義され、内部targetNamespaceのネストされた要素もこの名前空間に含まれます。これがないと、要素と要素は名前空間に含まれますが、要素は名前空間に含まれません。tableStatTypeelementFormDefault="qualified"EntityStathttp://www.schemas.theliraeffect.com/chargen/entitytable

于 2012-08-31T17:28:01.290 に答える