Określanie obszaru nazw miejsce docelowe Using miejsce docelowe obszar nazw atrybut (SQLXML 4.0)
Podczas zapisywania schematów XSD, można użyć XSD miejsce docelowe obszar nazw atrybut do określania docelowego obszaru nazw.W tym temacie opisano sposób XSD docelowy obszar nazw, elementFormDefault, and attributeFormDefault atrybuty pracy, ich wpływ na wystąpienie XML, który jest generowany i określono kwerendy XPath z obszarami nazw.
Można użyć xsd:targetNamespace atrybut ma zostać umieszczona elementy i atrybuty z obszaru nazw domyślnych w inny obszar nazw.Można również określić, czy lokalnie deklarowanej elementy i atrybuty schematu mają być wyświetlane kwalifikowaną przez obszar nazw, albo bezpośrednio przez przy użyciu prefiksu lub niejawnie domyślnie.Można użyć elementFormDefault and attributeFormDefault atrybutów**<xsd:schema>** element, aby określić globalny kwalifikacji lokalne elementów i atrybutów, lub można użyć formularz atrybut określić oddzielnie poszczególnych elementów i atrybutów.
Przykłady
Aby utworzyć próbek pracy przy użyciu poniższych przykładach, musi spełniać określone wymagania.Aby uzyskać więcej informacji zobaczWymagania dotyczące uruchamianie SQLXML przykłady.
A.Określanie miejsce docelowe obszaru nazw
Określa następujące schematu XSD a miejsce docelowe obszaru nazw przy użyciu xsd:miejsce doceloweNamespace atrybut. Ustawia również schematu elementFormDefault and attributeFormDefault wartości atrybut "niekwalifikowanych" (wartość domyślna dla tych atrybut).To jest globalne deklaracja i wpływa na wszystkie (elementy lokalne**<Zamówienia>** w schemacie) i atrybuty ()Identyfikator klienta, Nazwa kontaktu, and Identyfikator zamówienia w schemacie).
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema"
xmlns:CO="urn:MyNamespace"
targetNamespace="urn:MyNamespace" >
<xsd:annotation>
<xsd:appinfo>
<sql:relationship name="CustOrders"
parent="Sales.Customer"
parent-key="CustomerID"
child="Sales.SalesOrderHeader"
child-key="CustomerID" />
</xsd:appinfo>
</xsd:annotation>
<xsd:element name="Customer"
sql:relation="Sales.Customer"
type="CO:CustomerType" />
<xsd:complexType name="CustomerType" >
<xsd:sequence>
<xsd:element name="Order"
sql:relation="Sales.SalesOrderHeader"
sql:relationship="CustOrders"
type="CO:OrderType" />
</xsd:sequence>
<xsd:attribute name="CustomerID" type="xsd:string" />
<xsd:attribute name="SalesPersonID" type="xsd:string" />
</xsd:complexType>
<xsd:complexType name="OrderType" >
<xsd:attribute name="SalesOrderID" type="xsd:integer" />
<xsd:attribute name="CustomerID" type="xsd:string" />
</xsd:complexType>
</xsd:schema>
W schemacie:
The CustomerType and OrderType type declarations are global and, therefore, are included in the schema's miejsce docelowe namespace.W rezultacie kiedy podanych tego typu w deklaracja <Odbiorcy> elementu i jego <Zamówienia> element podrzędność prefiks zostanie określony, która jest skojarzona z docelowym obszarem nazw.
The <Customer> element is also included in the miejsce docelowe namespace of the schema because it is a global element in the schema.
wykonać następującej kwerendy XPath względem schematu:
(/CO:Customer[@CustomerID=1)
Kwerendy XPath generuje to wystąpienie dokument (tylko kilka zamówień są pokazywane):
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<y0:Customer xmlns:y0="urn:MyNamespace"
CustomerID="ALFKI" ContactName="Maria Anders">
<Order CustomerID="ALFKI" OrderID="10643" />
<Order CustomerID="ALFKI" OrderID="10692" />
...
</y0:Customer>
</ROOT>
Niniejszy dokument instancji określa urn:MyNamespace obszar nazw i kojarzy (prefiksy0) do niego. Prefiks jest stosowane tylko do <Odbiorcy> element globalny. (Element jest globalnym, ponieważ jest on zadeklarowany jako element podrzędność <xsd:schema> element w schemacie).
Prefiks nie jest stosowana dla lokalnego elementów i atrybutów, ponieważ wartość elementFormDefault and attributeFormDefault ustawiono atrybuty "niekwalifikowanych" w schemacie.Należy zauważyć, że <Zamówienia> element jest lokalna, ponieważ jego deklaracja pojawia się jako element podrzędność <element complexType> element, który definiuje <CustomerType> element. W podobny sposób (atrybutyIdentyfikator klienta, Identyfikator zamówienia, and Nazwa kontaktu) są lokalne i globalne nie.
Aby utworzyć próbę pracy tego schematu
Skopiować powyższy kod schematu i wkleić go do pliku tekstowego.Zapisz plik jako targetNameSpace.xml.
Skopiuj następujący szablon i wkleić go do pliku tekstowego.Zapisz plik jako targetNameSpaceT.xml w tym samym katalogu, w którym zapisano targetNamespace.xml.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="targetNamespace.xml" xmlns:CO="urn:MyNamespace" > /CO:Customer[@CustomerID=1] </sql:xpath-query> </ROOT>Zwraca kwerendę XPath w szablonie <Odbiorcy> element dla odbiorcy z IDKlienta 1. Należy zauważyć, że kwerendy XPath Określa prefiks obszaru nazw dla elementu w kwerendzie, a nie dla atrybut.(Nie są kwalifikowane atrybutów lokalnych, jak określono w schemacie.)
To ścieżka do katalogu określonego dla mapowania schematu (targetNamespace.xml) jest względna w stosunku do katalogu, w którym są zapisywane w szablonie.Ścieżka bezwzględna również można określić, na przykład:
mapping-schema="C:\MyDir\targetNamepsace.xml"Tworzenie i używanie skryptu testu 4.0 SQLXML (Sqlxml4test.vbs) do wykonać tego szablonu.
Aby uzyskać więcej informacji zobacz Przy użyciu obiektu ADO w celu wykonać kwerendy SQLXML.
Jeśli określono schematu elementFormDefault and attributeFormDefault atrybuty z wartość "kwalifikowane", wystąpienie dokument będzie miał wszystkie lokalne elementy i atrybuty kwalifikacje.Można zmienić poprzedni schemat, aby uwzględnić te atrybuty w <xsd:schema> element i ponownie uruchomić tego szablonu. Ponieważ atrybuty są teraz również kwalifikowane w kolejności, kwerendy XPath zmieni zawiera prefiks obszaru nazw.
Jest to poprawione kwerendy XPath:
/CO:Customer[@CO:CustomerID=1]
Jest to dokument XML, która zostanie zwrócona:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<y0:Customer xmlns:y0="urn:MyNamespace" CustomerID="1" SalesPersonID="280">
<Order SalesOrderID="43860" CustomerID="1" />
<Order SalesOrderID="44501" CustomerID="1" />
<Order SalesOrderID="45283" CustomerID="1" />
<Order SalesOrderID="46042" CustomerID="1" />
</y0:Customer>
</ROOT>