º» ¹®¼¿¡¼´Â DTD(Document Type Definition), Microsoft XDR(XML-Data Reduced) ½ºÅ°¸¶, XSD(XML Schema Definition Language) ½ºÅ°¸¶¸¦ XML(eXtensible Markup Language) ¹®¼¿¡ Àû¿ëÇÏ´Â ¹æ¹ýÀ» º¸¿©ÁÝ´Ï´Ù. ¶ÇÇÑ
XmlValidatingReader Ŭ·¡½º¸¦ »ç¿ëÇÏ¿© XML ¹®¼°¡ ÁöÁ¤µÈ ¹®¹ý¿¡ ¸Â´ÂÁö °Ë»çÇÏ´Â ¹æ¹ý°ú
XmlSchemaCollection Ŭ·¡½º·Î ½ºÅ°¸¶¸¦ ¸Þ¸ð¸®¿¡ ij½ÌÇÏ¿© XML À¯È¿¼º °Ë»ç¸¦ ÃÖÀûÈÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ¼µµ ¼³¸íÇÕ´Ï´Ù.
XML ¹®¼´Â ¿ä¼Ò¿Í Ư¼ºÀ» Æ÷ÇÔÇϸç ÀÀ¿ë ÇÁ·Î±×·¥°ú Á¶Á÷ °£¿¡ µ¥ÀÌÅ͸¦ À¯¿¬ÇÏ°í °·ÂÇÏ°Ô ±³È¯ÇÒ ¼ö ÀÖ´Â ¼ö´ÜÀ» Á¦°øÇÕ´Ï´Ù. ÀûÇÕÇÑ XML ¹®¼ÀÇ ±¸Á¶¿Í ³»¿ëÀ» ÁöÁ¤ÇÏ·Á¸é DTD, XDR ½ºÅ°¸¶ ¶Ç´Â XSD ½ºÅ°¸¶¸¦ ÀÛ¼ºÇØ¾ß ÇÕ´Ï´Ù. Microsoft .NET Framework¿¡¼´Â XML ¹®¹ýÀ» ÁöÁ¤ÇÏ´Â ¹æ¹ýÀ¸·Î XSD ½ºÅ°¸¶¸¦ ±ÇÀåÇÏÁö¸¸ DTD¿Í XDR ½ºÅ°¸¶µµ Áö¿øÇÕ´Ï´Ù.
¿ä±¸ »çÇ×
º» ¹®¼¿¡¼´Â »ç¿ëÀÚ°¡ ´ÙÀ½ ³»¿ëÀ» Àß ¾Ë°í ÀÖ´Ù°í °¡Á¤ÇÕ´Ï´Ù.
- Microsoft Visual C# .NET ¶Ç´Â Microsoft Visual Basic .NET ±¸¹®
- À¯È¿¼º °Ë»ç ¹®Á¦¸¦ ºñ·ÔÇÑ XML °³³ä
XML ¹®¼ ¸¸µé±â
- Visual Studio .NETÀ» ½ÃÀÛÇÕ´Ï´Ù.
- ·ÎÄà ÄÄÇ»ÅÍ¿¡ »õ XML ÆÄÀÏÀ» ¸¸µì´Ï´Ù.
- ¾Æ·¡ÀÇ µ¥ÀÌÅ͸¦ XML ¹®¼¿¡ Ãß°¡ÇÏ¿© īŻ·Î±×ÀÇ Á¦Ç°À» Ç¥ÇöÇϵµ·Ï ÇÕ´Ï´Ù.
<Product ProductID="123">
<ProductName>Rugby jersey</ProductName>
</Product>
- C:\MyFolder¶ó´Â »õ Æú´õ¿¡ Product.xmlÀ̶ó´Â À̸§À¸·Î ÆÄÀÏÀ» ÀúÀåÇÕ´Ï´Ù.
DTD »ç¿ë
DTD ¸¸µé±â ¹× XML ¹®¼¿¡ ¿¬°á
- Visual Studio .NET¿¡¼ ºó ÅØ½ºÆ® ÆÄÀÏÀ» ¸¸µì´Ï´Ù.
- ¾Æ·¡ÀÇ DTD ¼±¾ðÀ» ÆÄÀÏ¿¡ Ãß°¡ÇÏ¿© XML ¹®¼ÀÇ ¹®¹ýÀ» ¼³¸íÇÕ´Ï´Ù.
<!ELEMENT Product (ProductName)>
<!ATTLIST Product ProductID CDATA #REQUIRED>
<!ELEMENT ProductName (#PCDATA)>
- C:\MyFolder µð·ºÅ͸®¿¡ Product.dtd¶ó´Â À̸§À¸·Î ÆÄÀÏÀ» ÀúÀåÇÕ´Ï´Ù.
- Visual Studio .NET¿¡¼ Product.xmlÀ» ¿±´Ï´Ù.
- ¾Æ·¡ÀÇ DOCTYPE ¹®À» Product.xmlÀÇ ¸Ç À§¿¡ Ãß°¡ÇÏ¿© XML ¹®¼¸¦ DTD ÆÄÀÏ¿¡ ¿¬°áÇÕ´Ï´Ù.
<?xml version='1.0' encoding='utf-16'?>
<!DOCTYPE Product SYSTEM "Product.dtd">
- ¼öÁ¤µÈ XML ¹®¼¸¦ ProductWithDTD.xml·Î ÀúÀåÇÕ´Ï´Ù.
DTD¸¦ »ç¿ëÇÏ¿© XML ¹®¼ÀÇ À¯È¿¼º °Ë»ç
- Visual Studio .NET¿¡¼ ValidateXmlÀ̶ó´Â »õ Visual C# ÄÜ¼Ö ÀÀ¿ë ÇÁ·Î±×·¥ ÇÁ·ÎÁ§Æ®¸¦ ¸¸µì´Ï´Ù.
- ¾Æ·¡¿Í °°ÀÌ µÎ using ¹®À» Class1.csÀÇ ½ÃÀÛ ºÎºÐ¿¡ Ãß°¡ÇÕ´Ï´Ù.
using System.Xml; // for XmlTextReader and XmlValidatingReader
using System.Xml.Schema; // for XmlSchemaCollection (which is used later)
- ¾Æ·¡¿Í °°ÀÌ Class1.cs¿¡¼ Main ¸Þ¼µå°¡ ½ÃÀ۵DZâ Àü¿¡ isValid¶ó´Â ºÎ¿ï Çʵ带 ¼±¾ðÇÕ´Ï´Ù.
private static bool isValid = true; // If a validation error occurs,
// set this flag to false in the
// validation event handler. - ¾Æ·¡¿Í °°ÀÌ Main ¸Þ¼µå¿¡ ÀÖ´Â ÅØ½ºÆ® ÆÄÀÏ¿¡¼ XML ¹®¼¸¦ Àд XmlTextReader °³Ã¼¸¦ ¸¸µç ´ÙÀ½ ÀÌ XML µ¥ÀÌÅÍÀÇ À¯È¿¼ºÀ» °Ë»çÇÏ´Â XmlValidatingReader¸¦ ¸¸µì´Ï´Ù.
XmlTextReader r = new XmlTextReader("C:\\MyFolder\\ProductWithDTD.xml");
XmlValidatingReader v = new XmlValidatingReader(r); - XmlValidatingReader °³Ã¼ÀÇ ValidationType ¼Ó¼ºÀº ÇÊ¿äÇÑ À¯È¿¼º °Ë»ç À¯Çü(DTD, XDR ¶Ç´Â Schema)À» ³ªÅ¸³À´Ï´Ù. ¾Æ·¡¿Í °°ÀÌ ÀÌ ¼Ó¼ºÀ» DTD·Î ¼³Á¤ÇÕ´Ï´Ù.
v.ValidationType = ValidationType.DTD;
- À¯È¿¼º °Ë»ç ¿À·ù°¡ ¹ß»ýÇϸé À¯È¿¼º °Ë»ç ÆÇµ¶±â°¡ À¯È¿¼º °Ë»ç À̺¥Æ®¸¦ »ý¼ºÇÕ´Ï´Ù. ¾Æ·¡ÀÇ Äڵ带 Ãß°¡ÇÏ¿© À¯È¿¼º °Ë»ç À̺¥Æ® 󸮱⸦ µî·ÏÇÕ´Ï´Ù. MyValidationEventHandler ¸Þ¼µå´Â 8´Ü°è¿¡¼ ±¸ÇöµË´Ï´Ù.
v.ValidationEventHandler +=
new ValidationEventHandler(MyValidationEventHandler);
- ¾Æ·¡ÀÇ Äڵ带 Ãß°¡ÇÏ¿© XML ¹®¼¸¦ ÀÐ°í ±× À¯È¿¼ºÀ» °Ë»çÇÕ´Ï´Ù. À¯È¿¼º °Ë»ç ¿À·ù°¡ ¹ß»ýÇϸé MyValidationEventHandler°¡ È£ÃâµÇ¾î ÇØ´ç ¿À·ù¸¦ ÇØ°áÇÕ´Ï´Ù. ÀÌ ¸Þ¼µå´Â isValid¸¦ false·Î ¼³Á¤ÇÕ´Ï´Ù(8´Ü°è ÂüÁ¶). À¯È¿¼º °Ë»ç ÈÄ isValidÀÇ »óŸ¦ ÅëÇØ ¹®¼°¡ À¯È¿ÇÑÁö ¾Æ´Ï¸é À¯È¿ÇÏÁö ¾ÊÀºÁö È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù.
while (v.Read())
{
// Can add code here to process the content.
}
v.Close();
// Check whether the document is valid or invalid.
if (isValid)
Console.WriteLine("Document is valid");
else
Console.WriteLine("Document is invalid"); - ¾Æ·¡¿Í °°ÀÌ Main ¸Þ¼µå µÞºÎºÐ¿¡ MyValidationEventHandler ¸Þ¼µå¸¦ ±â·ÏÇÕ´Ï´Ù.
public static void MyValidationEventHandler(object sender,
ValidationEventArgs args)
{
isValid = false;
Console.WriteLine("Validation event\n" + args.Message);
} - ÀÀ¿ë ÇÁ·Î±×·¥À» ºôµåÇÏ°í ½ÇÇàÇÕ´Ï´Ù. ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼ XML ¹®¼°¡ À¯È¿ÇÏ´Ù°í º¸°íÇØ¾ß ÇÕ´Ï´Ù.
- Visual Studio .NET¿¡¼ ProductWithDTD.xmlÀ» ¼öÁ¤ÇÏ¿© ÀÌ XML ¹®¼¸¦ À¯È¿ÇÏÁö ¾Ê°Ô ¸¸µì´Ï´Ù. ¿¹¸¦ µé¾î, "<ProductName>Rugby jersey</ProductName>" ¿ä¼Ò¸¦ »èÁ¦ÇÕ´Ï´Ù.
- ÀÀ¿ë ÇÁ·Î±×·¥À» ´Ù½Ã ½ÇÇàÇÕ´Ï´Ù. ±×·¯¸é ¾Æ·¡ÀÇ ¿À·ù ¸Þ½ÃÁö°¡ ¼ö½ÅµË´Ï´Ù.
À¯È¿¼º °Ë»ç À̺¥Æ®
'Product' ¿ä¼Ò¿¡ À߸øµÈ ³»¿ëÀÌ ÀÖ½À´Ï´Ù. 'ProductName'ÀÌ ÇÊ¿äÇÕ´Ï´Ù.
file:///C:/Myfolder/ProductWithDTD.xml(4,5)¿¡¼ ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù.
¹®¼°¡ À߸øµÇ¾ú½À´Ï´Ù.
XDR ½ºÅ°¸¶ »ç¿ë
XDR ½ºÅ°¸¶ ¸¸µé±â ¹× XML ¹®¼¿¡ ¿¬°á
- Visual Studio .NET¿¡¼ ºó ÅØ½ºÆ® ÆÄÀÏÀ» ¸¸µì´Ï´Ù.
- ¾Æ·¡ÀÇ XDR ½ºÅ°¸¶ Á¤ÀǸ¦ ÆÄÀÏ¿¡ Ãß°¡ÇÏ¿© XML ¹®¼ÀÇ ¹®¹ýÀ» ¼³¸íÇÕ´Ï´Ù.
<?xml version='1.0' encoding='utf-16'?>
<Schema name="ProductSchema"
xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes">
<ElementType name="Product" content="eltOnly">
<attribute type="ProductID" required="yes"/>
<element type="ProductName"/>
</ElementType>
<AttributeType name="ProductID" dt:type="int"/>
<ElementType name="ProductName" dt:type="string"/>
</Schema> - C:\MyFolder µð·ºÅ͸®¿¡ Product.xdrÀ̶ó´Â À̸§À¸·Î ÆÄÀÏÀ» ÀúÀåÇÕ´Ï´Ù.
- ¿øº» Product.xml ÆÄÀÏÀ» ¿°í ¾Æ·¡¿Í °°ÀÌ XDR ½ºÅ°¸¶¿¡ ¿¬°áÇÕ´Ï´Ù.
<?xml version='1.0' encoding='utf-16'?>
<Product ProductID="123" xmlns="x-schema:Product.xdr">
<ProductName>Rugby jersey</ProductName>
</Product>
- ¼öÁ¤µÈ XML ¹®¼¸¦ ProductWithXDR.xml·Î ÀúÀåÇÕ´Ï´Ù.
XDR ½ºÅ°¸¶¸¦ »ç¿ëÇÏ¿© XML ¹®¼ÀÇ À¯È¿¼º °Ë»ç
- ¾Æ·¡¿Í °°ÀÌ ÀÀ¿ë ÇÁ·Î±×·¥À» ¼öÁ¤ÇÏ¿© XmlTextReader°¡ ProductWithXDR.xmlÀ» ·ÎµåÇϵµ·Ï ÇÕ´Ï´Ù.
XmlTextReader r = new XmlTextReader("C:\\MyFolder\\ProductWithXDR.xml"); - ¾Æ·¡¿Í °°ÀÌ ValidationTypeÀ» XDR·Î ¼³Á¤ÇÏ¿© À¯È¿¼º °Ë»ç ÆÇµ¶±â°¡ XDR À¯È¿¼º °Ë»ç¸¦ ¼öÇàÇϵµ·Ï ÇÕ´Ï´Ù.
v.ValidationType = ValidationType.XDR;
- ÀÀ¿ë ÇÁ·Î±×·¥À» ºôµåÇÏ°í ½ÇÇàÇÕ´Ï´Ù. ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼ XML ¹®¼°¡ À¯È¿ÇÏ´Ù°í º¸°íÇØ¾ß ÇÕ´Ï´Ù.
- ProductWithXDR.xmlÀ» ¼öÁ¤ÇÏ¿© À¯È¿ÇÏÁö ¾Ê°Ô ¸¸µì´Ï´Ù.
- ÀÀ¿ë ÇÁ·Î±×·¥À» ´Ù½Ã ºôµåÇÏ°í ½ÇÇàÇÕ´Ï´Ù. ±×·¯¸é À¯È¿¼º °Ë»ç ¿À·ù°¡ ¼ö½ÅµË´Ï´Ù.
XSD ½ºÅ°¸¶ »ç¿ë
XSD ½ºÅ°¸¶ ¸¸µé±â ¹× XML ¹®¼¿¡ ¿¬°á
- Visual Studio .NET¿¡¼ ºó ÅØ½ºÆ® ÆÄÀÏÀ» ¸¸µì´Ï´Ù.
- ¾Æ·¡ÀÇ XSD ½ºÅ°¸¶ Á¤ÀǸ¦ ÆÄÀÏ¿¡ Ãß°¡ÇÏ¿© XML ¹®¼ÀÇ ¹®¹ýÀ» ¼³¸íÇÕ´Ï´Ù.
<?xml version='1.0' encoding='utf-16'?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="Product">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ProductName" type="xsd:string"/>
</xsd:sequence>
<xsd:attribute name="ProductID" use="required" type="xsd:int"/>
</xsd:complexType>
</xsd:element>
</xsd:schema> - C:\MyFolder µð·ºÅ͸®¿¡ Product.xsd¶ó´Â À̸§À¸·Î ÆÄÀÏÀ» ÀúÀåÇÕ´Ï´Ù.
- ¿øº» Product.xmlÀ» ¿°í ¾Æ·¡¿Í °°ÀÌ XSD ½ºÅ°¸¶¿¡ ¿¬°áÇÕ´Ï´Ù.
<?xml version='1.0' encoding='utf-16'?>
<Product ProductID="123"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="Product.xsd">
<ProductName>Rugby jersey</ProductName>
</Product> - ¼öÁ¤µÈ XML ¹®¼¸¦ ProductWithXSD.xml·Î ÀúÀåÇÕ´Ï´Ù.
XSD ½ºÅ°¸¶¸¦ »ç¿ëÇÏ¿© XML ¹®¼ÀÇ À¯È¿¼º °Ë»ç
- ¾Æ·¡¿Í °°ÀÌ ÀÀ¿ë ÇÁ·Î±×·¥À» ¼öÁ¤ÇÏ¿© XmlTextReader°¡ ProductWithXSD.xmlÀ» ·ÎµåÇϵµ·Ï ÇÕ´Ï´Ù.
XmlTextReader r = new XmlTextReader("C:\\MyFolder\\ProductWithXSD.xml"); - ¾Æ·¡¿Í °°ÀÌ ValidationTypeÀ» Schema·Î ¼³Á¤ÇÏ¿© À¯È¿¼º °Ë»ç ÆÇµ¶±â°¡ XSD ½ºÅ°¸¶ À¯È¿¼º °Ë»ç¸¦ ¼öÇàÇϵµ·Ï ÇÕ´Ï´Ù.
v.ValidationType = ValidationType.Schema;
- ÀÀ¿ë ÇÁ·Î±×·¥À» ºôµåÇÏ°í ½ÇÇàÇÏ¿© XSD ½ºÅ°¸¶·Î XML ¹®¼ÀÇ À¯È¿¼ºÀ» °Ë»çÇÕ´Ï´Ù.
XSD ½ºÅ°¸¶¿¡¼ ³×ÀÓ½ºÆäÀ̽º »ç¿ë
- Visual Studio .NET¿¡¼ ProductWithXSD.xmlÀ» ¿±´Ï´Ù.
- ¹®¼¿¡¼ ±âº» ³×ÀÓ½ºÆäÀ̽º urn:MyNamespace¸¦ ¼±¾ðÇÕ´Ï´Ù. ¶ÇÇÑ ¾Æ·¡¿Í °°ÀÌ XSD ¸µÅ©¸¦ ¼öÁ¤ÇÏ¿© XSD ½ºÅ°¸¶·Î ÀÌ ³×ÀÓ½ºÆäÀ̽º¿¡ ÀÖ´Â ³»¿ëÀÇ À¯È¿¼ºÀ» °Ë»çÇϵµ·Ï ÇÕ´Ï´Ù.
<?xml version='1.0' encoding='utf-16'?>
<Product ProductID="123"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="urn:MyNamespace"
xsi:schemaLocation="urn:MyNamespace Product.xsd">
<ProductName>Rugby jersey</ProductName>
</Product> - ProductWithXSD.xml¿¡ ´ëÇÑ º¯°æ ³»¿ëÀ» ÀúÀåÇÕ´Ï´Ù.
- Product.xsd¸¦ ¿°í ¾Æ·¡¿Í °°ÀÌ ½º¸¶Æ® ÅÂ±× <xsd:schema>¸¦ ¼öÁ¤ÇÏ¿© ½ºÅ°¸¶¸¦ ³×ÀÓ½ºÆäÀ̽º urn:MyNamespace¿¡ Àû¿ëÇÕ´Ï´Ù.
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:MyNamespace"
elementFormDefault="qualified"> - Product.xsd¿¡ ´ëÇÑ º¯°æ ³»¿ëÀ» ÀúÀåÇÕ´Ï´Ù.
- ÀÀ¿ë ÇÁ·Î±×·¥À» ºôµåÇÏ°í ½ÇÇàÇÏ¿© XSD ½ºÅ°¸¶·Î XML ¹®¼ÀÇ À¯È¿¼ºÀ» °Ë»çÇÕ´Ï´Ù.
³×ÀÓ½ºÆäÀ̽º ij½Ì
- Visual Studio .NET¿¡¼ Class1.cs¸¦ ¿±´Ï´Ù. ¾Æ·¡¿Í °°ÀÌ Main ¸Þ¼µåÀÇ ½ÃÀÛ ºÎºÐ¿¡ XmlSchemaCollection °³Ã¼¸¦ ¸¸µì´Ï´Ù.
XmlSchemaCollection cache = new XmlSchemaCollection();
- XmlSchemaCollection °³Ã¼¸¦ »ç¿ëÇÏ¸é ½ºÅ°¸¶¸¦ ¸Þ¸ð¸®¿¡ ij½ÌÇÏ¿© ¼º´ÉÀ» Çâ»ó½Ãų ¼ö ÀÖ½À´Ï´Ù. °¢ ½ºÅ°¸¶¸¶´Ù ´Ù¸¥ ³×ÀÓ½ºÆäÀ̽º¿¡ ¿¬°áµË´Ï´Ù. ¾Æ·¡ÀÇ Äڵ带 Ãß°¡ÇÏ¿© Product.xsd¸¦ ij½ÌÇÕ´Ï´Ù.
cache.Add("urn:MyNamespace", "C:\\MyFolder\\Product.xsd"); - XmlValidatingReader °³Ã¼¸¦ ¸¸µå´Â ÄÚµå ´ÙÀ½¿¡ ´ÙÀ½ ¹®À» Ãß°¡ÇÏ¿© ½ºÅ°¸¶ ij½Ã°¡ XmlValidatingReader¿¡ Ãß°¡µÇµµ·Ï ÇÕ´Ï´Ù. ±×·¯¸é ÆÇµ¶±â¿¡¼´Â ¸Þ¸ð¸® ³»ÀÇ ½ºÅ°¸¶¸¦ »ç¿ëÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù.
ÀÛµ¿ ¿©ºÎ È®ÀÎ
- ÀÀ¿ë ÇÁ·Î±×·¥À» ºôµåÇÏ°í ½ÇÇàÇÕ´Ï´Ù.
- XML ¹®¼°¡ XSD ½ºÅ°¸¶¿¡ ´ëÇØ ¿©ÀüÈ÷ À¯È¿ÇÑÁö È®ÀÎÇÕ´Ï´Ù.
- ProductWithXSD.xmlÀ» ¼öÁ¤ÇÏ¿© À¯È¿ÇÏÁö ¾Ê°Ô ¸¸µì´Ï´Ù.
- ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ÇØ´ç À¯È¿¼º °Ë»ç ¿À·ù¸¦ °¨ÁöÇÏ´ÂÁö È®ÀÎÇÕ´Ï´Ù.
±â¼ú ÀÚ·á: 307379 - ¸¶Áö¸· °ËÅä: 2002³â 3¿ù 14ÀÏ ¸ñ¿äÀÏ - ¼öÁ¤: 1.0
º» ¹®¼ÀÇ Á¤º¸´Â ´ÙÀ½ÀÇ Á¦Ç°¿¡ Àû¿ëµË´Ï´Ù.
- Microsoft Visual Studio .NET 2002 Professional Edition
| kbhowto kbhowtomaster KB307379 |