Um relacionamento de entidade Tipo 1 de XML é um relacionamento entre duas exibições. Cada exibição deve ser raiz em um tipo complexo global. Uma exibição deve ser derivada da outra.
O esquema seguinte contém PublicationType, BookType e MagazineType. PublicationType é o tipo de base. Uma publicação contém Title, Author e Date. BookType e MagazineType são tipos derivados que estendem PublicationType. Livro tem ISBN e Editor, e Revista tem Volume e Edição.
<xsd:complexType name="PublicationType"> <xsd:sequence>
<xsd:element name="Title" type="xsd:string"/>
<xsd:element name="Author" type="xsd:string" maxOccurs="unbounded"/> <xsd:element name="Date" type="xsd:string"/>
</xsd:sequence> </xsd:complexType>
<xsd:element name="Publication" type="PublicationType"/> <xsd:complexType name="BookType">
<xsd:complexContent>
<xsd:extension base="PublicationType"> <xsd:sequence>
</xsd:complexContent> </xsd:complexType> <xsd:complexType name="MagazineType"> <xsd:complexContent> <xsd:extension base="PublicationType"> <xsd:sequence>
<xsd:element name="Volume" type="xsd:string"/> <xsd:element name="Edition" type="xsd:string"/> </xsd:sequence>
</xsd:extension> </xsd:complexContent> </xsd:complexType> </xsd:schema>
Quando você cria exibições XML como entidades em uma definição XML, os metadados de Title e Date de PublicationType não se repetem em BookType ou MagazineType. Em vez disso, essas exibições contêm os metadados que as distinguem de PublicationType: ISBN e Editor para BookType e volume e edição para MagazineType. Elas têm chaves externas que as vinculam a PublicationType.
Esse exemplo usa explosão de metadados reduzidos porque nenhum dos elementos do tipo de base é repetido nos tipos derivados.
Autor é um elemento que ocorre várias vezes em Publicação. Author se torna uma exibição XML. A figura a seguir mostra as exibições padrão que o Designer gera a partir do esquema:
A figura a seguir mostra um arquivo XML que tem uma publicação, uma revista e livros:
Se processar o arquivo XML de exemplo usando a definição XML da figura precedente, você criará dados nas seguintes exibições:
• Exibição PublicationType. Contém o título e a data de cada publicação.
A figura a seguir mostra a exibição PublicationType:
• Exibição BookType. Contém o ISBN e o editor. BookType contém uma chave externa para
PublicationType.
A figura a seguir mostra a exibição BookType:
• Exibição MagazineType. Contém volume e edição. MagazineType também contém uma chave externa
para o PublicationType.
• Exibição Author. Contém autores de todas as publicações. O Designer gera uma exibição separada
para Autor porque Autor é um elemento com várias ocorrências. Cada publicação pode conter vários autores.
A figura a seguir mostra a exibição Autor:
Exemplo de Relacionamento de Entidade Tipo II
Você pode criar um relacionamento de herança entre uma coluna e uma exibição de tipo complexo. A coluna deve ser um elemento de um tipo complexo local. A exibição deve ser a raiz em um tipo complexo global. O tipo complexo local deve ser derivado do tipo complexo global.
Por exemplo, o esquema a seguir define um tipo complexo chamado EmployeeType. EmployeeType contém os elementos EmployeeNumber e EmployeeName.
EmployeeStatusType inclui um elemento chamado Employee que estende EmployeeType. Employee inclui um elemento EmployeeStatus.
<xs:element name="Employee_Payroll"> <xs:complexType>
<xs:sequence>
<xs:element name="EmployeeStatus" type="EmpStatusType" maxOccurs="unbounded"></xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:complexType name="EmpStatusType"> <xs:sequence>
<xs:element name="Employee" minOccurs="0" maxOccurs="1"> <xs:complexType>
<xs:complexContent>
<xs:extension base="EmployeeType"> xs:sequence>
<xs:element name="EmployeeStatus" type="xs:string"> </xs:element> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> <xs:complexType name="EmployeeType"> <xs:sequence>
<xs:element name="EmployeeName" type="xs:string"></xs:element> <xs:element name="EmployeeNumber" type="xs:string"></xs:element> </xs:sequence>
</xs:complexType> </xs:schema>
Quando você importa o esquema, o Designer cria uma exibição para Employee_Payroll, EmployeeType e EmployeeStatus. A exibição EmployeeStatus contém a coluna chamada Employee. Employee deriva de EmployeeType.
A figura a seguir mostra a exibição Employee_Payroll, a exibição EmployeeType e a exibição XML EmployeeStatus:
A exibição EMPLOYEE_Payroll contém o elemento Employee_Payroll e uma chave primária,
PK_Employee_Payroll. A exibição Employee _ Payroll está conectado à exibição EmployeeStatus por uma linha azul que indica uma sequência de relacionamento um a muitos entre as exibições. Employee_Payroll contém várias ocorrências de EmployeeStatus.
A exibição EmployeeStatus contém um elemento Employee do tipo EmployeeType. O elemento Employee estende EmployeeType, incluindo um elemento EmployeeStatus. A exibição EmployeeStatus também contém uma chave externa para Employee_Payroll. A exibição EmployeeStatus está conectada a uma exibição com uma seta cinza EmployeeType. A seta indica um tipo de relacionamento entre as exibições. A exibição EmployeeType contém um EmployeeType que consiste em EmployeeName e employeeNumber.