PerfectXML.com

 

Specifications

 

XML 1.1 Working Draft

http://www.w3.org/TR/xml11/

XML Information Set

http://www.w3.org/TR/xml-infoset

XML 1.0

http://www.w3.org/TR/REC-xml

Namespaces in XML

http://www.w3.org/TR/REC-xml-names/

XML Encryption Requirements

http://www.w3.org/TR/xml-encryption-req

XML Protocol Working Group

http://www.w3.org/2000/xp

XML-RPC

http://www.xmlrpc.com/spec

SOAP 1.1 W3C Note

http://www.w3.org/TR/SOAP/

SOAP Version 1.2 Part 1: Messaging Framework

http://www.w3.org/TR/soap12-part1/

SOAP Version 1.2 Part 2: Adjuncts

http://www.w3.org/TR/soap12-part2/

SOAP Security Extensions: Digital Signature

http://www.w3.org/TR/SOAP-dsig/

SOAP Messages with Attachments

http://www.w3.org/TR/SOAP-attachments

Web Services Description Language (WSDL)

http://www.w3.org/TR/wsdl

UDDI Specification

http://uddi.org/specification.html

ebXML

http://www.ebxml.org/specs/

Rosettanet

http://www.rosettanet.og

BizTalk

http://www.microsoft.com/biztalk/techinfo/framework20.asp

VoiceXML

http://www.w3.org/TR/voicexml20/

XSL Transformations (XSLT) version 1.0

http://www.w3.org/TR/xslt

XSL Transformations (XSLT) 1.1 Working Draft

http://www.w3.org/TR/xslt11

XSLT Requirements version 2.0

http://www.w3.org/TR/xslt20req

XPath

http://www.w3.org/TR/xpath

XForms 1.0

http://www.w3.org/TR/xforms

XML Schema Part 0: Primer

http://www.w3.org/TR/xmlschema-0/

XML Schema Part 1: Structures

http://www.w3.org/TR/xmlschema-1/

XML Schema Part 2: Datatypes

http://www.w3.org/TR/xmlschema-2/

XML-Signature Syntax and Processing

http://www.w3.org/TR/xmldsig-core/

RDF Schemas

http://www.w3.org/TR/rdf-schema/

RDF Model and Syntax Specification

http://www.w3.org/TR/REC-rdf-syntax/

Scalable Vector Graphics (SVG) 1.0 Specification

http://www.w3.org/TR/SVG/

XQuery

http://www.w3.org/TR/xquery/

XML Fragment Interchange

http://www.w3.org/TR/xml-fragment

XML Linking Language (XLink)

http://www.w3.org/TR/xlink/

XML Pointer Language (XPointer)

http://www.w3.org/TR/xptr/

DOM Level 3 Core

http://www.w3.org/TR/DOM-Level-3-Core/

SAX 2.0

http://www.saxproject.org/

DOM Level 3 XPath Specification

http://www.w3.org/TR/2001/WD-DOM-Level-3-XPath-20011031/

WAP

http://www.wapforum.com

                

Namespaces

 

XSLT 1.0 W3C Recommendation

http://www.w3.org/1999/XSL/Transform

XSL 1998 Working Draft

http://www.w3.org/TR/WD-xsl

SOAP 1.1 Envelope

http://schemas.xmlsoap.org/soap/envelope/

SOAP 1.1 Encoding

http://schemas.xmlsoap.org/soap/encoding/

SOAP 1.2 Working Draft Envelope

http://www.w3.org/2001/09/soap-envelope

SOAP 1.2 Working Draft SOAP Serialization

http://www.w3.org/2001/09/soap-encoding

SOAP 1.2 Working Draft RPC Result Element

http://www.w3.org/2001/09/soap-rpc

Microsoft SOAP Toolkit WSDL Extensions

http://schemas.microsoft.com/soap-toolkit/wsdl-extension

XML Schema Recommendation

http://www.w3.org/2001/XMLSchema

XML Schema Recommendation Attributes

http://www.w3.org/2001/XMLSchema-instance

XDR Elements

urn:schemas-microsoft-com:xml-data

XDR Datatypes

urn:schemas-microsoft-com:datatypes

SQL Server 2000 XML Template Files

urn:schemas-microsoft-com:xml-sql

SQL Server 2000 Updategrams

urn:schemas-microsoft-com:xml-updategram

SQL Server 2000 Annotated (XML-to-relational) Mapping Schemas

urn:schemas-microsoft-com:mapping-schema

SQL Server 2000 DiffGrams

urn:schemas-microsoft-com:xml-diffgram-01

WSDL 1.1 Note

http://schemas.xmlsoap.org/wsdl/

WSDL 1.1 Note SOAP Binding

http://schemas.xmlsoap.org/wsdl/soap/

WSDL 1.1 Note HTTP (GET/POST) Binding

http://schemas.xmlsoap.org/wsdl/http/

WSDL 1.1 Note MIME Binding

http://schemas.xmlsoap.org/wsdl/mime/

Web Services Discovery (DISCO)

http://schemas.xmlsoap.org/disco/

 

          

MSXML 4.0 ProgIDs and GUIDs

 

 

CLSID_DOMDocument40

Msxml2.DOMDocument.4.0

{88d969c0-f192-11d4-a65f-0040963251e5}

CLSID_FreeThreadedDOMDocument40

Msxml2.FreeThreadedDOMDocument.4.0

{88d969c1-f192-11d4-a65f-0040963251e5}

CLSID_SAXXMLReader40

Msxml2.SAXXMLReader.4.0

{7c6e29bc-8b8b-4c3d-859e-af6cd158be0f}

CLSID_SAXAttributes40

Msxml2.SAXAttributes.4.0

{88d969ca-f192-11d4-a65f-0040963251e5}

CLSID_MXXMLWriter40

Msxml2.MXXMLWriter.4.0

{88d969c8-f192-11d4-a65f-0040963251e5}

CLSID_MXHTMLWriter40

Msxml2.MXHTMLWriter.4.0

{88d969c9-f192-11d4-a65f-0040963251e5}

CLSID_XMLHTTP40

Msxml2.XMLHTTP.4.0

{88d969c5-f192-11d4-a65f-0040963251e5}

CLSID_ServerXMLHTTP40

Msxml2.ServerXMLHTTP.4.0

{88d969c6-f192-11d4-a65f-0040963251e5}

CLSID_MXNamespaceManager40

Msxml2. MXNamespaceManager.4.0

{88d969d6-f192-11d4-a65f-0040963251e5}

CLSID_XMLSchemaCache40

Msxml2.XMLSchemaCache.4.0

{88d969c2-f192-11d4-a65f-0040963251e5}

CLSID_XSLTemplate40

Msxml2.XSLTemplate.4.0

{88d969c3-f192-11d4-a65f-0040963251e5}

CLSID_DSOControl40

Msxml2.DSOControl.4.0

{88d969c4-f192-11d4-a65f-0040963251e5}

             

HTTP Headers

HTTP Status Codes

General

Cache-Control

Cache-Control: no-cache

100

Continue

Connection

Connection: close

101

Switching Protocols

Date

Date: Mon, 17 Dec 2001 08:30:00 GMT

200

OK

Pragma

Pragma: no-cache

201

Created

Transfer-Encoding

Transfer-Encoding: chunked

202

Accepted

Upgrade

Upgrade: SHTTP/1.3

203

Non-Authoritative Information

Via

Via: HTTP/1.1 SVR1, 1.0 SVR2

204

No Content

Request

 

205

Reset Content

Accept

Accept:text/html, text/*;q=0.5, image/gif

206

Partial Content

Accept-Charset

Accept-Charset: iso-8859-5, unicode-1-1;q=0.8

300

Multiple Choices

Accept-Encoding

Accept-Encoding: compress, gzip
Accept-Encoding: x-compress, gzip

301

302

Moved Permanently

Moved Temporarily

Accept-Language

Accept-Language: da, en-gb;q=0.8, en;q=0.7

303

See Other

Authorization

Authorization: Basic K3mrq7UhrLoL

304

Not Modified

From

From: [email protected]

305

Use Proxy

Host

Host: PerfectXML.com

400

Bad Request

If-Match

If-Match: "Testing"

401

Unauthorized

If-Modified-Since

If-Modified-Since: Mon, 17 Dec 2001 08:30:00 GMT

402

Payment Required

If-None-Match

If-None-Match: "xyzzy"

403

Forbidden

If-Range

 

404

Not Found

If-Unmodified-Since

If-UnModified-Since: Mon, 17 Dec 2001 08:30:00 GMT

405

Method Not Allowed

Max-Forwards

 

406

Not Acceptable

Proxy-Authorization

 

407

Proxy Authentication Required

Range

Range: bytes=120-180,10

408

Request Time-out

Referer

Referer: https://PerfectXML.com

409

Conflict

User-Agent

User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Win32)

410

Gone

Response

 

411

Length Required

Accept-Ranges

Accept-Ranges: none

412

Precondition Failed

Age

Age: 9000

413

Request Entity Too Large

Location

Location: http://www.w3c.org/index.htm

414

Request-URI Too Large

Proxy-Authenticate

 

415

Unsupported Media Type

Public

Public: OPTIONS, MGET, MHEAD, GET, HEAD

500

Internal Server Error

Retry-After

Retry-After=120

501

Not Implemented

Server

Server: Apache/0.8.4

502

Bad Gateway

 

 

 

 

Vary

 

503

Service Unavailable

Warning

 

504

Gateway Time-out

WWW-Authenticate

WWW-Authenticate: Basic realm="[email protected]"

505

HTTP Version not supported

Entities

 

 

 

Allow

Allow: GET, HEAD, POST

Content-Base

 

Content-Encoding

Content-Encoding: gzip

Content-Language

Content-Language: da

Content-Length

Content-Length: 3495

Content-Location

 

Content-MD5

 

Content-Range

Content-Range: bytes 21010-47021/47022

Content-Type

Content-Type: text/html; charset=ISO-8859-4

ETag

ETag: "xyzzy"

Expires

Expires: Thu, 01 Dec 1994 16:00:00 GMT

Last-Modified

Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT

Cookies

 

Set-Cookie (Response Header) from HTTP Server to client
Set-Cookie: name=value;
comment=comment_val;
domain=domain_val;
max-Age=a_value;
path=p_value;
secure;
version=ver_value;

 

Cookie (Request Header) from client to the HTTP server
Cookie: $Version=ver_value;
cookie_name1=cookie_val1[;$Path=path_val1][;$Domain=domain_val1]…

 

 

Encoding Schemes Supported by MSXML 4.0

UTF-8

UCS-4

ISO-8859-1

ISO-8859-4

ISO-8859-7

UNICODE-1-1-UTF-8

 

WINDOWS-1250

          To

WINDOWS-1258

UTF-16

ISO-10646-UCS-2

ISO-8859-2

ISO-8859-5

ISO-8859-8

UNICODE-2-0-UTF-16

UCS-2

US-ASCII

ISO-8859-3

ISO-8859-6

ISO-8859-9

UNICODE-2-0-UTF-8

 

 

 

 

 

 

 

Sample XML Document

<?xml version = "1.0" encoding = "UTF-8"?>

 

<!--Purchase Order Summary (version 1.2 Dec'2001) -->

<POSummary> 

            <PONumber>1011</PONumber> 

            <PODate>01/01/2002</PODate> 

            <TotalNetValue>$2,440.32</TotalNetValue> 

            <Vendor ID = "V_ELEC_GA_1">   

                        <Company>ABC Electronics</Company>

                        <Street>1427 Valley Lake Dr</Street>   

                        <City>Atlanta</City>   

                        <State>GA</State>   

                        <V_Contact>     

                                    <Name>Dean Johnson</Name>     

                                    <Phone>555-111-2222</Phone>     

                                    <Fax>555-111-2223</Fax>   

                        </V_Contact> 

            </Vendor> 

            <ShipTo>   

                        <Company>XYZ Software</Company>   

                        <Street>900 National Pkwy</Street>   

                        <City>Seattle</City>   

                        <State>WA</State>   

                        <S_Contact>     

                                    <Name>Gerold Franklin</Name>     

                                    <Phone>425-111-2222</Phone>     

                                    <Fax>425-111-2223</Fax>   

                        </S_Contact> 

            </ShipTo> 

            <Comments><![CDATA[

                        If net amount < $2000, please pay

                        via company check, else any CC is ok.

                        ]]></Comments>

</POSummary>

 

 

 

 

 

 

 

 

 

 

 

Sample XSD Schema

<?xml version="1.0"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" >

  <xsd:element name="POSummary">

    <xsd:complexType>

      <xsd:sequence>

        <xsd:element name="PONumber" type="xsd:string" minOccurs="1"  />

        <xsd:element name="PODate" type="xsd:string" minOccurs="1"  />

        <xsd:element name="TotalNetValue" type="xsd:string" minOccurs="1"  />

        <xsd:element name="Vendor" minOccurs="1" maxOccurs="1">

          <xsd:complexType>

            <xsd:sequence>

              <xsd:element name="Company" type="xsd:string" minOccurs="1"  />

              <xsd:element name="Street" type="xsd:string" minOccurs="1"  />

              <xsd:element name="City" type="xsd:string" minOccurs="1"  />

              <xsd:element name="State" type="xsd:string" minOccurs="1"  />

              <xsd:element name="V_Contact" minOccurs="1" maxOccurs="unbounded">

                <xsd:complexType>

                  <xsd:sequence>

                    <xsd:element name="Name" type="xsd:string" minOccurs="0"  />

                    <xsd:element name="Phone" type="xsd:string" minOccurs="0"  />

                    <xsd:element name="Fax" type="xsd:string" minOccurs="0"  />

                  </xsd:sequence>

                </xsd:complexType>

              </xsd:element>

            </xsd:sequence>

            <xsd:attribute name="ID" form="unqualified" type="xsd:string" />

          </xsd:complexType>

        </xsd:element>

        <xsd:element name="ShipTo" minOccurs="1" maxOccurs="1">

          <xsd:complexType>

            <xsd:sequence>

              <xsd:element name="Company" type="xsd:string" minOccurs="1"  />

              <xsd:element name="Street" type="xsd:string" minOccurs="1"  />

              <xsd:element name="City" type="xsd:string" minOccurs="1"  />

              <xsd:element name="State" type="xsd:string" minOccurs="1"  />

              <xsd:element name="S_Contact" minOccurs="1" maxOccurs="unbounded">

                <xsd:complexType>

                  <xsd:sequence>

                    <xsd:element name="Name" type="xsd:string" minOccurs="0"  />

                    <xsd:element name="Phone" type="xsd:string" minOccurs="0"  />

                    <xsd:element name="Fax" type="xsd:string" minOccurs="0"  />

                  </xsd:sequence>

                </xsd:complexType>

              </xsd:element>

            </xsd:sequence>

          </xsd:complexType>

        </xsd:element>

        <xsd:element name="Comments" type="xsd:string" minOccurs="0"  />

      </xsd:sequence>

    </xsd:complexType>

  </xsd:element>

</xsd:schema>

 

Sample XSLT Stylesheet

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

            <xsl:param name="VendorOrShipTo" />

            <xsl:output method="html"/>

            <xsl:template match="/">

                        <xsl:apply-templates />

            </xsl:template>

            <xsl:template match="/POSummary">

                        <xsl:if test="$VendorOrShipTo = 'V'">

                                    <xsl:apply-templates select="Vendor" />

                        </xsl:if>

                        <xsl:if test="$VendorOrShipTo = 'S'">

                                    <xsl:apply-templates select="ShipTo" />

                        </xsl:if>

            </xsl:template>

            <xsl:template match="Vendor">

                        <b>Vendor: <xsl:value-of select="@ID"/></b><br />

                        <blockquote><b><xsl:value-of select="Company"/></b></blockquote>

            </xsl:template>

            <xsl:template match="ShipTo">

                        <b>Ship To: </b><br />

                        <blockquote>

                                    <b><xsl:value-of select="Contact/Name"/></b><br />

                                    <b><xsl:value-of select="Company"/></b><br />

                                    <b><xsl:value-of select="Street"/></b><br />

                                    <b><xsl:value-of select="City"/></b>,

                                    <b><xsl:value-of select="State"/></b>

                        </blockquote>

            </xsl:template>

</xsl:stylesheet>

 

 

 

 

Sample MSXML 4.0 Code to Validate XML Document & Apply XSLT Stylesheet

    Dim objXMLDOM As New MSXML2.DOMDocument40

    Dim objXSLDOM As New MSXML2.FreeThreadedDOMDocument40

    Dim objXSLTemplate As New MSXML2.XSLTemplate40

    Dim objXSLProcessor As IXSLProcessor

    Dim objSchema As New MSXML2.XMLSchemaCache40

 

    objSchema.Add "", "c:\po.xsd"

    objXMLDOM.async = False

 

    Set objXMLDOM.schemas = objSchema

    objXMLDOM.Load "c:\po.xml"

 

    If objXMLDOM.parseError.errorCode <> 0 Then

        MsgBox "Error:" & objXMLDOM.parseError.reason

    Else

        objXSLDOM.async = False

        objXSLDOM.Load "c:\po.xsl"

       

        Set objXSLTemplate.stylesheet = objXSLDOM

        Set objXSLProcessor = objXSLTemplate.createProcessor()

       

        objXSLProcessor.input = objXMLDOM

        objXSLProcessor.addParameter "VendorOrShipTo", "S"

        objXSLProcessor.Transform

       

        MsgBox objXSLProcessor.output

       

        objXSLProcessor.addParameter "VendorOrShipTo", "V"

        objXSLProcessor.Transform

        MsgBox objXSLProcessor.output

       

    End If

 

    Set objSchema = Nothing

    Set objXMLDOM = Nothing

    Set objXSLDOM = Nothing

    Set objXSLTemplate = Nothing

    Set objXSLProcessor = Nothing

 

 

 

 

Sample SOAP 1.1 Request Payload

POST /MusicTeachers/MusicTeachers.asmx HTTP/1.1

Host: localhost

Content-Type: text/xml; charset=utf-8

Content-Length: length

SOAPAction: "https://PerfectXML.com/NETWebSvcs/MusicTeachers/FindMusicTeachers"

 

<?xml version="1.0" encoding="utf-8"?>

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

                        xmlns:xsd="http://www.w3.org/2001/XMLSchema"

                        xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">

  <soap:Body>

 

    <FindMusicTeachers xmlns="https://PerfectXML.com/NETWebSvcs/MusicTeachers/">

      <ZipCode>string</ZipCode>

      <Instrument>string</Instrument>

      <SkillLevel>string</SkillLevel>

      <Style>string</Style>

      <Radius>int</Radius>

      <RestrictResultsCount>int</RestrictResultsCount>

    </FindMusicTeachers>

 

  </soap:Body>

 

</soap:Envelope>

 

Sample SOAP 1.1 Response Payload

HTTP/1.1 200 OK

Content-Type: text/xml; charset=utf-8

Content-Length: length

 

<?xml version="1.0" encoding="utf-8"?>

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

                        xmlns:xsd="http://www.w3.org/2001/XMLSchema"

                        xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">

  <soap:Body>

    <FindMusicTeachersResponse xmlns="https://PerfectXML.com/NETWebSvcs/MusicTeachers/">

      <FindMusicTeachersResult>

        <xsd:schema>schema</xsd:schema>xml</FindMusicTeachersResult>

    </FindMusicTeachersResponse>

  </soap:Body>

 

</soap:Envelope>

 

 

Sample SOAP 1.1 Fault Response Payloads

HTTP/1.1 500 Internal Server Error

Content-Type: text/xml; charset="utf-8"

Content-Length: nnnn

 

<SOAP-ENV:Envelope

  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">

   <SOAP-ENV:Body>

       <SOAP-ENV:Fault>

           <faultcode>SOAP-ENV:MustUnderstand</faultcode>

           <faultstring>SOAP Must Understand Error</faultstring>

       </SOAP-ENV:Fault>

   </SOAP-ENV:Body>

</SOAP-ENV:Envelope>

 

 

Example 2:

HTTP/1.1 500 Internal Server Error

Content-Type: text/xml; charset="utf-8"

Content-Length: nnnn

 

<SOAP-ENV:Envelope

  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">

   <SOAP-ENV:Body>

       <SOAP-ENV:Fault>

           <faultcode>SOAP-ENV:Server</faultcode>

           <faultstring>Server Error</faultstring>

           <detail>

               <e:myfaultdetails xmlns:e="Some-URI">

                 <message>

                   My application didn't work

                 </message>

                 <errorcode>

                   1001

                 </errorcode>

               </e:myfaultdetails>

           </detail>

       </SOAP-ENV:Fault>

   </SOAP-ENV:Body>

</SOAP-ENV:Envelope>

 

 

 

 

 

Sample VoiceXML Document

<?xml version="1.0"?> 

 <!DOCTYPE vxml PUBLIC "-//BeVocal Inc//VoiceXML 1.0//EN"  "http://cafe.bevocal.com/libraries/dtd/vxml1-0-bevocal.dtd"> 

 <vxml version="1.0"> 

   <form> 

     <field name="choice"> 

       <prompt> 

         Please choose News, Weather, or Sports. 

       </prompt> 

       <grammar> 

         [ news weather sports ] 

       </grammar> 

     </field> 

     <block> 

       <submit next="MakeChoice.asp"/> 

     </block> 

   </form> 

 </vxml> 

 

 

Sample WML Document

<?xml version="1.0"?>

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">

<wml>

 <card id="calCard" title="Calendar">

  <p>

   1/18/2002:0 Events

  </p>

  <p>

   -------------

  </p>

  <p>

   Try Another Date: <input type="text" name="calDate" maxlength="10"/>

   <do type="accept" label="View Events">

    <go method="post" href="C.asp">

     <postfield name="calDate" value="$calDate" />

    </go>

   </do>

  </p>

 

 </card>

</wml>

 

MSXML Versions Reference

 

MSXML Versions Shipped with OS Versions

1

Msxml.dll

4.71.1712.5

1.0a

Msxml.dll

4.72.2106.4

1.0 SP1

Msxml.dll

4.72.3110.0

2

Msxml.dll

5.0.2014.0206

2.0a

Msxml.dll

5.0.2314.1000

2.0b

Msxml.dll

5.0.2614.3500

2.5 Beta 2

Msxml.dll

5.0.2919.38

2.5a

Msxml.dll

5.0.2919.6303

2.5

Msxml.dll

5.0.2920.0

2.5 SP1

Msxml.dll

8.0.5226

2.6 January Web Release

Msxml2.dll

7.50.4920.0

2.6

Msxml2.dll

8.0.6518.2

3.0 March Web Release

Msxml3.dll

7.50.5108.0

3

Msxml3.dll

8.0.7820.0

3.0 SP1

Msxml3.dll

8.10.8308.0

3.0 SP2

Msxml3.dll

8.20.8730.1

4

Msxml4.dll

4.0.9004.0

 

Windows 95 OSR 2.5

1.0 (4.71.1712.5)

Windows 95 OSR 2.5

1.0a (4.72.2106.4)

Windows 95 OSR 2.5

2.0a (5.0.2014.0206)

Windows 98 SE

2.0b (5.0.2614.3500)

Windows 95/98

2.5a (5.0.2919.6303)

Windows NT 4.0

2.5a (5.0.2919.6303)

Windows 2000

2.5 (5.0.2920.0

Windows 2000

2.5 SP1 (8.0.5226)

Windows 95/98

2.5 SP1 (8.0.5226)

Windows NT 4.0

2.5 SP1 (8.0.5226)

Windows NT 4.0

2.5 SP1 (8.0.5226)

Windows 2000

2.5 (5.0.2920.0

Windows 2000 SP1

2.5 (8.0.5226)

Windows XP Home/Professional)

3.0 SP2 (8.20.8730.1)

 

 

Data Types Supported by MSXML 4.0

bin.base64

date

float

i1

ui1

bin.hex

dateTime

int

i2

ui2

boolean

dateTime.tz

number

i4

ui4

char

fixed.14.4

time

i8

ui8

uuid

uri

time.tz

r4

r8