XML/XML Schema/targetNamespace

Материал из Web эксперт
Перейти к: навигация, поиск

Creating Vocabularies that Belong to a Namespace

File: Schema.xsd
<?xml version = "1.0" ?> 
<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema"
           targetNamespace = "http://www.wbex.ru/Customers"
           xmlns = "http://www.wbex.ru/Customers">
   
   <xs:element name = "Customer" >
      <xs:complexType>
         <xs:sequence>
            <xs:element name = "FirstName" type = "xs:string" />
            <xs:element name = "MiddleInitial" type = "xs:string" />
            <xs:element ref = "LastName" />
         </xs:sequence>
      </xs:complexType>
   </xs:element>
   
   <xs:element name = "LastName" type = "xs:string" />
   
</xs:schema>
File: Data.xml
<?xml version = "1.0" ?>
<cust:Customer xmlns:cust = "http://www.wbex.ru/Customers"
               xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation = "Schema.xsd">
   <FirstName>first</FirstName>
   <MiddleInitial>middle</MiddleInitial>
   <cust:LastName>last</cust:LastName>
</cust:Customer>



Creating Vocabularies that Do Not Belong to a Namespace

File: Schema.xsd
<?xml version = "1.0" ?> 
<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema">
   
   <xs:element name = "Customer" >
      <xs:complexType>
         <xs:sequence>
            <xs:element name = "FirstName" type = "xs:string" />
            <xs:element name = "MiddleInitial" type = "xs:string" />
            <xs:element name = "LastName" type = "xs:string" />
         </xs:sequence>
      </xs:complexType>
   </xs:element>
   
</xs:schema>
A conforming instance document would look something like this:
<?xml version = "1.0" ?>
<Customer xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
          xsi:noNamespaceSchemaLocation = "Schema.xsd">
   
   <FirstName>first</FirstName>
   <MiddleInitial>middle</MiddleInitial>
   <LastName>last</LastName>
</Customer>



Looking Behind Namespace Qualification

File: Schema.xsd
<?xml version = "1.0" ?> 
<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema"
           targetNamespace = "http://www.wbex.ru/Customers"
           xmlns = "http://www.wbex.ru/Customers">
   
   <xs:element name = "Customer" type = "CustomerType" />
   <xs:complexType name = "CustomerType">
      <xs:sequence>
         <xs:element name = "FirstName" type = "xs:string" />
         <xs:element name = "MiddleInitial" type = "xs:string" />
         <xs:element ref = "LastName" />
      </xs:sequence>
      <xs:attribute name = "clubCardMember" type = "xs:boolean" />
      <xs:attribute ref = "customerID" />
   </xs:complexType>
   <xs:element name = "LastName" type = "xs:string" />
   <xs:attribute name = "customerID" type = "xs:integer" />
   
</xs:schema>
File: Data.xml
<?xml version = "1.0" ?>
<cust:Customer xmlns:cust = "http://www.wbex.ru/Customers"
               clubCardMember = "true" 
               cust:customerID = "24427">
   <FirstName>first</FirstName>
   <MiddleInitial>middle</MiddleInitial>
   <cust:LastName>last</cust:LastName>
</cust:Customer>



Set targetNamespace

File: Data.xml
<?xml version="1.0"?>
<employees
  xmlns="http://www.wbex.ru/employees"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.wbex.ru/employees Schema.xsd"
  source="from where"
  version="1.0">
  <employee person="personName" tags="tagName">
    <name>
      <first>first</first>
      <middle>middle</middle>
      <last>last</last>
    </name>
    <location>
      <latitude>1</latitude>
      <longitude>1</longitude>
      <address>USA</address>
    </location>
    <phone>12345678</phone>
    <knows employees="name of employees"/>
    <description>description</description>
  </employee>
</employees>
File: Schema.xsd
<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
  xmlns:employees="http://www.wbex.ru/employees"
  targetNamespace="http://www.wbex.ru/employees"
  elementFormDefault="qualified">
  <attributeGroup name="employeeAttributes">
    <attribute name="version" type="decimal" fixed="1.0" />
    <attribute name="source" type="string"/>
  </attributeGroup>
  <element name="employees">
    <complexType>
      <sequence>
        <element name="employee" minOccurs="0" maxOccurs="unbounded">
          <complexType>
            <sequence>
              <element name="name" type="employees:NameType"/>
              <element name="location" type="employees:LocationType"/>
              <element name="phone" type="employees:PhoneType"/>
              <element name="knows" type="employees:KnowsType"/>
              <element name="description" type="employees:DescriptionType"/>
            </sequence>
            <attribute name="tags" type="token"/>
            <attribute name="person" type="ID"/>
          </complexType>
        </element>
      </sequence>
      <attributeGroup ref="employees:employeeAttributes"/>
    </complexType>
  </element>
  <complexType name="NameType">
    <group ref="employees:NameGroup"/>
    <attribute name="title" type="string"/>
  </complexType>
  <group name="NameGroup">
    <sequence>
      <element name="first" type="string" minOccurs="1" maxOccurs="unbounded"/>
      <element name="middle" type="string" minOccurs="0" maxOccurs="1"/>
      <element name="last" type="string"/>
    </sequence>
  </group>
  <complexType name="LocationType">
    <choice minOccurs="0" maxOccurs="unbounded">
      <element name="address" type="string"/>
      <sequence>
        <element name="latitude" type="float"/>
        <element name="longitude" type="float"/>
      </sequence>
    </choice>
  </complexType>
  <complexType name="PhoneType">
    <simpleContent>
      <extension base="string">
        <attribute name="kind" type="string" default="Home" />
      </extension>
    </simpleContent>
  </complexType>
  
  <complexType name="KnowsType">
    <attribute name="employees" type="string"/>
  </complexType>
  <complexType name="DescriptionType" mixed="true">
    <choice minOccurs="0" maxOccurs="unbounded">
      <element name="em" type="string"/>
      <element name="strong" type="string"/>
      <element name="br" type="string"/>
    </choice>
  </complexType>
</schema>



targetNamespace and non-default namespace

File: Data.xml
<?xml version="1.0"?>
<products xmlns ="http://www.wbex.ru"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.wbex.ru Schema.xsd">
      <product>
          <name>name 1</name>
          <image>a.gif</image>
          <description>description 1</description>
          <warranty>lifetime warranty</warranty>
          <cost>41.95</cost>
          <retailer>http://www.wbex.ru</retailer>
      </product>
      <product>
          <name>name 2</name>
          <image>b.gif</image>
          <description>description 2</description>
          <cost>239.00</cost>
          <retailer>http://www.wbex.ru</retailer>
      </product>
</products>

File: Schema.xsd
<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.wbex.ru"
        elementFormDefault="qualified"
        xmlns:j="http://www.wbex.ru">
    <element name="products">
        <complexType>
            <sequence>
                <element ref="j:product" minOccurs="0" maxOccurs="unbounded"/>
            </sequence>
        </complexType>
    </element>
    <element name="product">
        <complexType>
            <sequence>
                <element ref="j:name"/>
                <element ref="j:image"/>
                <element ref="j:description"/>
                <element ref="j:warranty" minOccurs="0"/>
                <element ref="j:weight" minOccurs="0"/>
                <element ref="j:cost" maxOccurs="unbounded"/>
                <element ref="j:retailer"/>
            </sequence>
        </complexType>
    </element>
    <element name="name" type="string"/>
    <element name="image" type="string"/>
    <element name="description" type="string"/>
    <element name="warranty" type="string"/>
    <element name="weight" type="string"/>
    <element name="cost" type="string"/>
    <element name="retailer" type="string"/>
</schema>