Określanie nazw docelowych Using targetNamespace atrybutu (SQLXML 4.0)
W piśmie schematów XSD, można użyć XSD miejsce docelowenazw atrybut, aby określić miejsce docelowe obszaru nazw.W tym temacie opisano sposób XSD targetNamespace, elementFormDefault, i attributeFormDefault atrybuty pracy, ich wpływ na wystąpienie XML, który jest generowany i jak kwerend XPath są określone obszary nazw.
Można użyć xsd:targetNamespace atrybut umieszczanie elementów i atrybutów z domyślnego obszaru nazw w inny obszar nazw.Można również określić, czy lokalnie deklarowanych elementy i atrybuty schematu mają być wyświetlane kwalifikowanej nazw, albo jawnie przy użyciu prefiksu lub niejawnie domyślnie.Można użyć elementFormDefault i attributeFormDefault atrybuty na <xsd: schema> można użyć elementu, aby określić globalny kwalifikacji lokalnej elementów i atrybutów, lub formularza atrybut oddzielnie określić poszczególne elementy i atrybuty.
Przykłady
Aby utworzyć próbki pracy przy użyciu poniższych przykładach, musi spełniać określone wymagania.Aby uzyskać więcej informacji, zobacz Wymagania dotyczące uruchamianie przykładów SQLXML.
A.Określanie miejsce docelowe nazw
Określa następujące schematu XSD miejsce docelowe obszaru nazw przy użyciu xsd:miejsce docelowenazw atrybut.Ustawia również schematu elementFormDefault i attributeFormDefault wartości atrybut "niekwalifikowanych" (wartość domyślna tych atrybut).Jest deklaracja globalnego i wpływa na wszystkie elementy lokalne (<zamówienia> w schemacie) i atrybuty (IDklienta, przedstawiciel, i IDZamó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:
CustomerType i OrderType deklaracje typu są globalne i dlatego są uwzględniane w schemacie miejsce docelowe obszaru nazw.W wyniku tego, kiedy podanych tych typów w deklaracja <klienta> elementu i jego <zamówienia> element podrzędność prefiks zostanie określony, który jest skojarzony z miejsce docelowe nazw.
<Klienta> element jest także zawarta w miejsce docelowe obszaru nazw schematu, ponieważ jest element globalny w schemacie.
Wykonanie następującej kwerendy XPath względem schematu:
(/CO:Customer[@CustomerID=1)
Kwerendy XPath generuje to wystąpienie dokument (tylko kilka zamówień są wyświetlane):
<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>
To wystąpienie dokument określa urn:MyNamespace nazw i kojarzy prefiks (y0) do niejPrefiks jest stosowane tylko do <klienta> element globalny.(Element jest globalnym, ponieważ jest zadeklarowana jako element podrzędność <xsd: schema> elementu w schemacie.)
Prefiks nie jest stosowane do lokalnego elementów i atrybutów, ponieważ wartość elementFormDefault i attributeFormDefault atrybutów jest zestaw do "niekwalifikowanych" w schemacie.Należy zauważyć, że <zamówienia> element jest lokalny, ponieważ jego deklaracja pojawia się jako element podrzędność <complexType> element, który definiuje <CustomerType> elementu.Podobnie, atrybuty (IDklienta, IDZamówienia, i przedstawiciel) są lokalne, globalne nie.
Tworzenie próbki roboczej tego schematu
Kod schematu skopiować 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 <klienta> elementu 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.(Atrybuty lokalnego nie są kwalifikowane, jak określono w schemacie.)
Ścieżka katalogu określonego dla mapowania schematu (targetNamespace.xml) jest katalog, w którym zapisany szablon.Ścieżka bezwzględna również można określić, na przykład:
mapping-schema="C:\MyDir\targetNamepsace.xml"Tworzenie i używanie szablon wykonać skryptu testu 4.0 SQLXML (Sqlxml4test.vbs).
Aby uzyskać więcej informacji, zobacz Przy użyciu ADO do wykonywania kwerend SQLXML.
Jeśli schemat określa elementFormDefault i attributeFormDefault atrybuty z wartością "kwalifikowany", wystąpienie dokument będzie miał wszystkie lokalne elementów i atrybutów, kwalifikacje.Można zmienić poprzedni schemat uwzględnienie tych atrybutów w <xsd: schema> element i ponownie wykonać szablon.Ponieważ atrybuty teraz są kwalifikowane w wystąpienie, zmieni kwerendę XPath zawiera prefiks obszaru nazw.
Jest to poprawione kwerendę XPath:
/CO:Customer[@CO:CustomerID=1]
Jest to dokument XML, który jest zwracany:
<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>