0

違いは何ですか (接頭辞 h:、c:、a: およびdefaultに焦点を当てます):

<?xml version="1.0" encoding="UTF-8"?>
<xmlBoo xmlns="http://www.example.org/boo" 
        xmlns:c="http://www.example.org/customer"
        xmlns:a="http://www.example.org/address"
        xmlns:h="http://www.example.org/header">
   <h:header>
      <h:id>101</h:id>
   </h:header>
   <c:customer>
      <c:id>1</c:id>
      <c:name>John</c:name>
      <a:address>
         <a:street>Long street</a:street>
      </a:address>
   </c:customer>
   <someBooSpecificField>Specific data in Boo</someBooSpecificField>
</xmlBoo>

<?xml version="1.0" encoding="UTF-8"?>
<xmlBoo xmlns="http://www.example.org/boo" 
        xmlns:c="http://www.example.org/customer"
        xmlns:a="http://www.example.org/address"
        xmlns:h="http://www.example.org/header">
   <header>
      <h:id>101</h:id>
   </header>
   <customer>
      <c:id>1</c:id>
      <c:name>John</c:name>
      <address>
         <a:street>Long street</a:street>
      </address>
   </customer>
   <someBooSpecificField>Specific data in Boo</someBooSpecificField>
</xmlBoo>

JAXB を介してマッピングを実装し、マーシャラーが最初の xml を作成したため、質問しています。しかし、スキーマ検証を追加すると、例外が発生します:

cvc-complex-type.2.4.a: Invalid content was found starting with element 'ns3:header'. One of '{"http://www.example.org/boo":header}' is expected.

バリデーターは (スキーマに基づいて) 2 番目の xml を予期しているようです。

要素ヘッダーの前に置くべきプレフィックスは? デフォルト(名前空間 [http://www.example.org/boo] に接続) またはh: (名前空間 [http://www.example.org/header] に接続)。

2 番目の例のようなサブ要素だけでなく、要素ヘッダー全体がh:に完全に接続されていると思いました。ベスト プラクティスとは何か、その説明は何か。

私のXMLスキーマ:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:h="http://www.example.org/header"
            xmlns:c="http://www.example.org/customer"
            targetNamespace="http://www.example.org/boo"
            elementFormDefault="qualified">

    <xsd:import namespace="http://www.example.org/header" schemaLocation="header.xsd"/>
    <xsd:import namespace="http://www.example.org/customer" schemaLocation="customer.xsd"/>

    <xsd:element name="xmlBoo">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="header" type="h:header"/>
                <xsd:element name="customer" type="c:customer"/>
                <xsd:element name="someBooSpecificField" type="xsd:string"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

</xsd:schema>

そして例えば。ヘッダー.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="http://www.example.org/header"
            elementFormDefault="qualified">

    <xsd:complexType name="header">
        <xsd:sequence>
            <xsd:element name="id" type="xsd:long"/>
        </xsd:sequence>
    </xsd:complexType>

</xsd:schema>
4

1 に答える 1

2

2 番目の XML の例は、スキーマ検証で示されているように正しいものです。

型の名前空間と要素の名前空間を混同していると思います。スキーマの行 <xsd:element name="header" type="h:header"> は、" http://www. example.org/header "名前空間。

行が代わりに <xsd:element name="myHeader" type="h:header"> である場合、xml がどのように見えるかを検討してください

于 2013-04-30T00:22:42.320 に答える