0

スキーマ SCOTT の db には、次のように作成された POLKI と PUDELKA の 2 つのテーブルがあります。

create table POLKI (
ID_POLKI NUMBER(3) CONSTRAINT PO_PK PRIMARY KEY,
NAZWA VARCHAR2(10) NOT NULL);
create table PUDELKA (
NAZWA VARCHAR2(10) NOT NULL,
KOLOR VARCHAR2(10),
ID_POLKI NUMBER(3) CONSTRAINT PU_PO_FK
REFERENCES POLKI(ID_POLKI) ); 

SQL/XML をマッピングして取得した dtd は次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT DB (SCOTT)>
<!ELEMENT SCOTT (POLKI, PUDELKA)>
<!ELEMENT POLKI (ROW1*)>
<!ELEMENT PUDELKA (ROW2*)>
<!ELEMENT ROW1 (ID_POLKI, NAZWA)>
<!ELEMENT ROW2 (NAZWA, KOLOR?,ID_POLKI?)> 
<!ELEMENT NAZWA (#PCDATA)>
<!ELEMENT KOLOR (#PCDATA)>
<!ELEMENT ID_POLKI (#PCDATA)>

次のように、すでに部分的に作成された xsd のギャップを埋めることにより、dtd に相当する xsd ファイルを作成する必要があります。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
targetNamespace="poprawka"
elementFormDefault="qualified" attribute
FormDefault="unqualified"
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . >
<xs:simpleType name="varchar2_10">
<xs:restriction base="xs:string">
<xs:minLength value="0"/>
<xs:maxLength value="10"/>
</xs:restriction>
</xs:simpleType>
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
<xs:element name="DB">
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
<xs:element name="SCOTT". . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .>
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
<xs:element name="POLKI". . . . . . .
. . . . . . . . . . . . . . . . . . . .>
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
<xs:element name="ROW". . . . .
. . . . . . . . . . . . . . . . . . . .>
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
<xs:element ref="NAZWA"/>
<xs:element name="ID_POLKI" . . . . . . . . . . . . . . . . . . .>
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
</xs:element>
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
</xs:element> <!-- ROW -->
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
</xs:element> <!-- POLKI -->
<xs:element name="PUDELKA". . . . . .
. . . . . . . . . . . . . . . . . . . .>
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
<xs:element name="ROW" . . . .
. . . . . . . . . . . . . . . . . . . .>
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
<xs:element ref="NAZWA"/>
<xs:element name="KOLOR".
. . . . . . . . . . . . . . . . . . . .>
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
</xs:element>
<xs:element name="ID_POLKI" . . . . . . . . . . . . . . . . . . .>
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
</xs:element>
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
</xs:element> <!-- ROW -->
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
</xs:element> <!-- PUDELKA -->
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
</xs:element> <!-- SCOTT -->
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
</xs:element> <!-- DB -->
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
</xs:schema> 

ここに私が作成したxsdがありますが、同等だと思いますか? はいの場合、使用する必要のないギャップがあるのはなぜですか(コメントでマークしました)?もし私が使うべきだったら、私は中に何を書きますか?

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="poprawka"
    elementFormDefault="qualified" 
    attributeFormDefault="unqualified"
    xmlns="poprawka"
    >

    <xs:simpleType name="varchar2_10">
        <xs:restriction base="xs:string">
            <xs:minLength value="0"/>
            <xs:maxLength value="10"/>
        </xs:restriction>
    </xs:simpleType>

 <xs:element name="NAZWA" type="varchar2_10" nillable="false"/>   
   <!-- is that ok, there's a lot of free space left as only for one line of code--> 

<xs:element name="DB">
    <xs:complexType>
     <xs:sequence>
    <xs:element name="SCOTT"> <!--shall I write something inside the element?-->
        <xs:complexType>
        <xs:sequence>
            <xs:element name="POLKI"> <!-- shall I write something inside the element?-->
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="ROW" maxOccurs="unbounded">
                         <xs:complexType>
                             <xs:all>
                                <xs:element ref="NAZWA"/> 
                                 <xs:element name="ID_POLKI"> <!--shall I write something inside the element?-->
                                    <xs:simpleType>
                                        <xs:restriction base="xs:int">
                                            <xs:pattern value="([0-9]){1,3}"/>
                                        </xs:restriction>
                                    </xs:simpleType>
                                </xs:element>
                             </xs:all>
                         </xs:complexType>
                        </xs:element> <!-- ROW -->
                    </xs:sequence>
                </xs:complexType>
            </xs:element> <!-- POLKI -->
            <xs:element name="PUDELKA" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:sequence>
                         <xs:element name="ROW" maxOccurs="unbounded" >
                             <xs:complexType>
                                 <xs:sequence>
                                    <xs:element ref="NAZWA"/>
                                    <xs:element name="KOLOR" type="varchar2_10" minOccurs="0" maxOccurs="1">
                                       <!-- free line, which I don't use -->          
                                    </xs:element>
                                     <xs:element name="ID_POLKI" minOccurs="0" maxOccurs="1">
                                        <xs:simpleType>
                                            <xs:restriction base="xs:int">
                                                <xs:pattern value="([0-9]){1,3}"/>
                                            </xs:restriction>
                                        </xs:simpleType>
                                    </xs:element>
                                 </xs:sequence>
                             </xs:complexType>
                         </xs:element> <!-- ROW -->
                    </xs:sequence>
                </xs:complexType>
                <!-- 4 free lines, and I use only two of them is there something missing --> 
            </xs:element> <!-- PUDELKA -->
        </xs:sequence>
        </xs:complexType>
        <!-- 4 free lines, and I use only two of them is there something missing --> 
    </xs:element> <!-- SCOTT -->
     </xs:sequence>
    </xs:complexType>
    <!-- 4 free lines, and I use only two of them is there something missing -->  
</xs:element> <!-- DB -->
</xs:schema> 
4

1 に答える 1

0

スキーマは(ほとんど)正しいように見えます。いくつかの観察:

要素PUDELKAは次のように宣言されていますmaxOccurs="unbounded"-これは私には間違っているようです:それはテーブルに対応しており、それは1つだけです。

このように 3 桁の整数を宣言するのは奇妙です / 間違っている可能性があります:

<xs:simpleType>
  <xs:restriction base="xs:int">
    <xs:pattern value="([0-9]){1,3}"/>
  </xs:restriction>
</xs:simpleType>

文字列に対してのみパターン制限を使用し、整数に対しては最小/最大値を設定します。

<xs:simpleType>
  <xs:restriction base="xs:int">
    <xs:minInclusive value="0"/>
    <xs:maxInclusive value="999"/>
  </xs:restriction>
</xs:simpleType>

XSD を記述する同等の方法は多数あります。たとえば、複合型は個別に宣言できます。

<xs:complexType name="PUDELKATYPE">
  <xs:sequence>
    . . .
  </xs:sequence>
</xs:complexType>

<xs:element name="PUDELKA" type="PUDELKATYPE" maxOccurs="unbounded"/>

またはインライン(あなたがしたように):

<xs:element name="PUDELKA" maxOccurs="unbounded">
  <xs:sequence>
    . . .
  </xs:sequence>
</xs:element>

これが「使用されていないスペース」の原因である可能性があります

および-ID_POLKI内の 2 つの同一の要素で使用される単一の名前付き単純型を宣言するか、両方で単一の名前付き要素を宣言できます ( で行ったように)。PUDELKAPOLKINAZWA

ID_POLKIwithinはwithinPUDELKAへの参照です。実際には、 and要素を使用して XSD でそのような関係を宣言できます。ID_POLKIPOLKIxs:keyxs:keyref

于 2013-09-06T15:11:27.987 に答える