在模式SCOTT中的db中我有两个表POLKI和PUDELKA这样创建:
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>
答案 0 :(得分:0)
架构看起来(大多数)对我来说是正确的。一些观察:
元素PUDELKA
被声明为maxOccurs="unbounded"
- 这对我来说似乎不对:它对应于一个表,只有一个。
声明这样的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
和PUDELKA
中的两个相同POLKI
元素使用 - 或者两者都使用一个命名元素(就像您使用{一样) {1}})。
NAZWA
中的{p> ID_POLKI
是对PUDELKA
中ID_POLKI
的引用 - 您实际上可以使用xs:key
和{{3在XSD中声明此类关系元素。