JavaRush /Blog Java /Random-VI /Khái niệm cơ bản về XML dành cho lập trình viên Java. Phầ...
Ярослав
Mức độ
Днепр

Khái niệm cơ bản về XML dành cho lập trình viên Java. Phần 2 trên 3

Xuất bản trong nhóm

Giới thiệu

Xin chào các độc giả thân mến của bài viết của tôi. Đây là bài viết thứ hai trong loạt bài về XML và bài viết này sẽ nói về Không gian tên XML và Lược đồ XML.
Khái niệm cơ bản về XML
Mới gần đây, bản thân tôi không biết gì về điều này, nhưng tôi đã nắm vững rất nhiều tài liệu và sẽ cố gắng giải thích hai chủ đề quan trọng này bằng những từ ngữ đơn giản. Tôi muốn nói ngay rằng lược đồ là một cơ chế rất tiên tiến để xác thực tài liệu XML và có nhiều chức năng hơn DTD, vì vậy sẽ không có nghiên cứu đầy đủ về chúng ở đây. Bắt đầu nào :)

Không gian tên XML

Namespace có nghĩa là “không gian tên”, tuy nhiên trong bài viết này tôi sẽ thường thay thế cách diễn đạt bằng tiếng Nga bằng không gian tên đơn giản, vì nó ngắn hơn và dễ hiểu hơn. Không gian tên XML là một công nghệ có mục đích chính là đảm bảo rằng tất cả các phần tử là duy nhất trong một tệp XML và không có sự nhầm lẫn. Và vì đây là các khóa học Java nên công nghệ tương tự cũng có sẵn trong các gói Java. Nếu chúng ta có thể đặt hai lớp có cùng tên cạnh nhau và sử dụng chúng, làm cách nào chúng ta xác định được lớp nào chúng ta cần? Vấn đề này được giải quyết bằng các gói - chúng ta có thể chỉ cần đặt các lớp trong các gói khác nhau và nhập chúng từ đó, chỉ định tên chính xác của gói mong muốn và đường dẫn đến gói đó hoặc chỉ cần chỉ định đường dẫn đầy đủ đến lớp mong muốn. Khái niệm cơ bản về XML dành cho lập trình viên Java.  Phần 2 của 3 - 1Bây giờ, chúng ta có thể làm điều này:
public class ExampleInvocation {
    public static void main(String[] args) {
        // Creation экземпляра класса из первого пакета.
        example_package_1.Example example1 = new example_package_1.Example();

        // Creation экземпляра класса из второго пакета.
        example_package_2.Example example2 = new example_package_2.Example();

        // Creation экземпляра класса из третьего пакета.
        example_package_3.Example example3 = new example_package_3.Example();
    }
}
Trong Không gian tên XML, mọi thứ gần như giống nhau, chỉ khác một chút. Bản chất là như nhau: nếu các phần tử giống nhau (như các lớp) thì chúng ta chỉ cần sử dụng chúng trong các không gian tên khác nhau (chỉ định các gói), thì ngay cả khi tên của các phần tử (lớp) bắt đầu trùng nhau, chúng ta vẫn sẽ truy cập một phần tử cụ thể từ không gian (gói). Ví dụ: chúng ta có hai phần tử trong XML - dự đoán (oracle) và cơ sở dữ liệu Oracle.
<?xml version="1.0" encoding="UTF-8"?>
<root>
    <oracle>
        <connection value="jdbc:oracle:thin:@10.220.140.48:1521:test1" />
        <user value="root" />
        <password value="111" />
    </oracle>

    <oracle>
        Сегодня вы будете заняты весь день.
    </oracle>
</root>
Và khi chúng tôi xử lý tệp XML này, chúng tôi sẽ vô cùng bối rối nếu thay vì cơ sở dữ liệu, chúng tôi nhận được một dự đoán và ngược lại. Để giải quyết xung đột giữa các phần tử, chúng ta có thể phân bổ không gian riêng cho từng phần tử để phân biệt giữa chúng. Có một thuộc tính đặc biệt cho việc này – xmlns:prefix= “giá trị duy nhất cho không gian tên”. Sau đó, chúng ta có thể thêm tiền tố vào các phần tử để chỉ ra rằng nó là một phần của không gian tên đó (về cơ bản, chúng ta phải tạo một đường dẫn gói - không gian tên, sau đó thêm tiền tố vào mỗi phần tử với gói mà nó thuộc về).
<?xml version="1.0" encoding="UTF-8"?>
<root>
    <database:oracle xmlns:database="Unique ID #1">
        <connection value="jdbc:oracle:thin:@10.220.140.48:1521:test1" />
        <user value="root" />
        <password value="111" />
    </database:oracle>

    <oracle:oracle xmlns:oracle="Unique ID #2">
        Сегодня вы будете заняты весь день.
    </oracle:oracle>
</root>
Trong ví dụ này, chúng tôi đã khai báo hai không gian tên: cơ sở dữ liệu và oracle. Bây giờ bạn có thể sử dụng tiền tố không gian tên trước các phần tử. Không cần phải sợ hãi nếu bây giờ có điều gì đó chưa rõ ràng. Trên thực tế, nó rất đơn giản. Lúc đầu, tôi muốn viết phần này của bài viết nhanh hơn, nhưng sau thứ Tư, tôi quyết định rằng mình cần chú ý hơn đến chủ đề này vì rất dễ nhầm lẫn hoặc không hiểu điều gì đó. Bây giờ sẽ có rất nhiều sự chú ý đến thuộc tính xmlns. Và vì vậy, một ví dụ khác:
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns="https://www.standart-namespace.com/" xmlns:gun="https://www.gun-shop.com/" xmlns:fish="https://www.fish-shop.com/">
    <gun:shop>
        <gun:guns>
            <gun:gun name="Revolver" price="1250$" max_ammo="7" />
            <gun:gun name="M4A1" price="3250$" max_ammo="30" />
            <gun:gun name="9mm Pistol" price="450$" max_ammo="12" />
        </gun:guns>
    </gun:shop>

    <fish:shop>
        <fish:fishes>
            <fish:fish name="Shark" price="1000$" />
            <fish:fish name="Tuna" price="5$" />
            <fish:fish name="Capelin" price="1$" />
        </fish:fishes>
    </fish:shop>
</root>
Bạn có thể xem XML thông thường bằng cách sử dụng súng không gian dành cho các phần tử độc đáo của cửa hàng súng và cá dành cho các phần tử độc đáo của cửa hàng câu cá. Bạn có thể thấy rằng bằng cách tạo các không gian, chúng tôi đã sử dụng một yếu tố cửa hàng cho hai thứ khác nhau cùng một lúc - cửa hàng vũ khí và cửa hàng cá, đồng thời chúng tôi biết chính xác đó là loại cửa hàng nào nhờ vào việc chúng tôi đã khai báo các không gian. Điều thú vị nhất sẽ bắt đầu trong các sơ đồ, khi chúng ta có thể xác nhận các cấu trúc khác nhau có cùng các phần tử theo cách này. xmlns là một thuộc tính để khai báo một vùng tên; nó có thể được chỉ định trong bất kỳ phần tử nào. Một ví dụ về khai báo không gian tên:
xmlns:shop= «https://barber-shop.com/»
Sau dấu hai chấm là tiền tố - đây là tham chiếu khoảng trắng có thể được sử dụng trước các phần tử để chỉ ra rằng chúng đến từ khoảng trắng đó. Giá trị xmlns phải là CHUỖI ĐỘC ĐÁO. Điều này cực kỳ quan trọng cần hiểu: việc sử dụng các liên kết trang web hoặc URI để khai báo một vùng tên là rất phổ biến. Quy tắc này là tiêu chuẩn vì URI hoặc URL của liên kết là duy nhất, NHƯNG đây là lúc nó rất khó hiểu. Chỉ cần nhớ: giá trị có thể là BẤT KỲ chuỗi nào bạn muốn, nhưng để đảm bảo nó là duy nhất và chuẩn, bạn cần sử dụng URL hoặc URI. Việc bạn có thể sử dụng bất kỳ chuỗi nào được hiển thị trong ví dụ trong oracle:
xmlns:oracle="Unique ID #2"
xmlns:database="Unique ID #1"
Khi bạn khai báo một vùng tên, bạn có thể sử dụng nó trên chính phần tử đó và trên tất cả các phần tử bên trong nó, vì vậy các vùng tên được khai báo trên phần tử gốc có thể được sử dụng trên tất cả các phần tử. Điều này có thể được thấy trong ví dụ trước và đây là một ví dụ cụ thể hơn:
<?xml version="1.0" encoding="UTF-8"?>
<root>
    <el1:element1 xmlns:el1="Element#1 Unique String">
        <el1:innerElement>

        </el1:innerElement>
    </el1:element1>


    <el2:element2 xmlns:el2="Element#2 Unique String">
        <el2:innerElement>

        </el2:innerElement>
    </el2:element2>


    <el3:element3 xmlns:el3="Element#3 Unique String">
        <el3:innerElement>
            <el1:innerInnerElement> <!-- Так нельзя, потому что пространство el1 объявлено только в первом элементе, потому может использовать только внутри первого element и его внутренних элементов. -->

            </el1:innerInnerElement>
        </el3:innerElement>
    </el3:element3>
</root>
Đây là một chi tiết quan trọng: cũng có một không gian tên tiêu chuẩn trong phần tử gốc. Nếu bạn khai báo các không gian tên khác, bạn sẽ ghi đè lên không gian tên mặc định và không thể sử dụng nó. Sau đó, bạn cần đặt một số loại tiền tố khoảng trắng phía trước phần tử gốc, bất kỳ loại tiền tố nào bạn đã khai báo trước đó. Tuy nhiên, điều này cũng có thể bị lừa: bạn có thể khai báo không gian tiêu chuẩn một cách rõ ràng. Chỉ cần không sử dụng tiền tố sau xmlns là đủ mà chỉ cần ghi ngay một số giá trị và tất cả các phần tử của bạn không có tiền tố sẽ thuộc về không gian tên cụ thể này. Ví dụ cuối cùng sử dụng điều này:
<root xmlns="https://www.standart-namespace.com/" xmlns:gun="https://www.gun-shop.com/" xmlns:fish="https://www.fish-shop.com/">
Chúng tôi đã khai báo không gian tiêu chuẩn một cách rõ ràng để tránh nhu cầu sử dụng súng hoặc cá, vì phần tử gốc không phải là thực thể của cửa hàng câu cá hoặc vũ khí, do đó, việc sử dụng một trong hai không gian sẽ không chính xác về mặt logic. Tiếp theo: nếu bạn đã tạo xmlns:a và xmlns:b nhưng chúng có cùng giá trị thì đây là cùng một không gian và chúng không phải là duy nhất. Đó là lý do tại sao bạn phải luôn sử dụng các giá trị duy nhất, vì việc vi phạm quy tắc này có thể gây ra rất nhiều lỗi. Ví dụ: nếu chúng ta có khoảng trắng được khai báo như thế này:
xmlns="https://www.standart-namespace.com/" xmlns:gun="https://www.gun-shop.com/" xmlns:fish="https://www.gun-shop.com/"
Khi đó cửa hàng câu cá của chúng tôi sẽ trở thành cửa hàng vũ khí và tiền tố vẫn là cửa hàng cá. Đây là tất cả những điểm chính của không gian. Tôi đã dành khá nhiều thời gian để thu thập tất cả và rút gọn lại rồi diễn đạt chúng một cách rõ ràng, vì thông tin trên các không gian trên Internet rất khổng lồ và thường chỉ là nước nên hầu hết mọi thứ ở đây - tôi đều tự mình học được qua thử nghiệm. và lỗi. Nếu bạn vẫn còn thắc mắc, bạn có thể thử đọc tài liệu bằng các liên kết ở cuối bài viết.

Lược đồ XML

Tôi muốn nói ngay rằng bài viết này sẽ chỉ là phần nổi của tảng băng chìm vì chủ đề rất rộng. Nếu bạn muốn làm quen với các lược đồ chi tiết hơn và học cách tự viết chúng với bất kỳ mức độ phức tạp nào, thì ở cuối bài viết sẽ có một liên kết nơi mọi thứ sẽ nói về các loại, hạn chế, tiện ích mở rộng khác nhau, v.v. Tôi muốn bắt đầu với lý thuyết. Lược đồ có định dạng .xsd (định nghĩa lược đồ xml) và là một giải pháp thay thế nâng cao và phổ biến hơn cho DTD: chúng cũng có thể tạo các phần tử, mô tả chúng, v.v. Tuy nhiên, rất nhiều tính năng bổ sung đã được thêm vào: kiểm tra kiểu, hỗ trợ không gian tên và chức năng rộng hơn. Bạn có nhớ khi chúng ta nói về DTD, có một điểm trừ là nó không hỗ trợ khoảng trắng không? Bây giờ chúng ta đã nghiên cứu điều này, tôi sẽ giải thích: nếu có thể nhập hai hoặc nhiều lược đồ từ một DTD, trong đó có các phần tử giống hệt nhau, chúng ta sẽ có xung đột (sự trùng hợp) và hoàn toàn không thể sử dụng chúng, bởi vì không rõ chúng ta cần yếu tố nào. XSD giải quyết vấn đề này vì bạn có thể nhập lược đồ vào một không gian cụ thể và sử dụng nó. Về cơ bản, mọi lược đồ XSD đều có một không gian đích, nghĩa là lược đồ sẽ được ghi vào không gian đó trong tệp XML. Do đó, trong chính tệp XML, chúng ta chỉ cần tạo các khoảng trắng được xác định trước trong lược đồ và gán tiền tố cho chúng, sau đó kết nối các lược đồ cần thiết với từng lược đồ, sau đó chúng ta có thể sử dụng các phần tử từ lược đồ một cách an toàn, thay thế các tiền tố từ không gian nơi chúng tôi nhập sơ đồ. Và vì vậy, chúng ta có một ví dụ:
<?xml version="1.0" encoding="UTF-8"?>
<house>
    <address>ул. Есенина, дом №5</address>
    <owner name="Ivan">
        <telephone>+38-094-521-77-35</telephone>
    </owner>
</house>
Chúng tôi muốn xác thực nó bằng một lược đồ. Đầu tiên, chúng ta cần một lược đồ:
<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="https://www.nedvigimost.com/">
    <element name="house">
        <complexType>
            <sequence>
                <element name="address" type="string" maxOccurs="unbounded" minOccurs="0" />
                <element name="owner" maxOccurs="unbounded" minOccurs="0" >
                    <complexType>
                        <sequence>
                            <element name="telephone" type="string" />
                        </sequence>
                        <attribute name="name" type="string" use="required"/>
                    </complexType>
                </element>
            </sequence>
        </complexType>
    </element>
</schema>
Như bạn có thể thấy, lược đồ cũng là các tệp XML. Bạn viết những gì bạn cần trực tiếp bằng XML. Lược đồ này có khả năng xác thực tệp XML từ ví dụ trên. Ví dụ: nếu chủ nhân không có tên thì mạch sẽ thấy thế này. Ngoài ra, nhờ yếu tố trình tự, địa chỉ phải luôn được đặt trước và sau đó là chủ sở hữu của ngôi nhà. Có những yếu tố thông thường và phức tạp. Các phần tử thông thường là các phần tử chỉ lưu trữ một số loại dữ liệu. Ví dụ:
<element name="telephone" type="string" />
Đây là cách chúng ta khai báo một phần tử lưu trữ một chuỗi. Không nên có phần tử nào khác bên trong phần tử này. Ngoài ra còn có các yếu tố phức tạp. Các phần tử phức tạp có khả năng lưu trữ các phần tử và thuộc tính khác bên trong chúng. Sau đó, bạn không cần chỉ định loại mà chỉ cần bắt đầu viết một kiểu phức tạp bên trong phần tử.
<complexType>
    <sequence>
        <element name="address" type="string" maxOccurs="unbounded" minOccurs="0" />
        <element name="owner" maxOccurs="unbounded" minOccurs="0" >
            <complexType>
                <sequence>
                    <element name="telephone" type="string" />
                </sequence>
                <attribute name="name" type="string" use="required"/>
            </complexType>
        </element>
    </sequence>
</complexType>
Cũng có thể làm theo cách khác: bạn có thể tạo một kiểu phức tạp riêng biệt, sau đó thay thế nó thành kiểu. Chỉ khi viết ví dụ này, vì lý do nào đó, cần phải khai báo khoảng trắng dưới một loại tiền tố nào đó và không sử dụng tiền tố tiêu chuẩn. Nói chung, nó diễn ra như thế này:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="https://www.nedvigimost.com/">
    <xs:element name="house" type="content" />

    <xs:complexType name="content">
        <xs:sequence>
            <xs:element name="address" type="xs:string" maxOccurs="unbounded" minOccurs="0" />
            <xs:element name="owner" maxOccurs="unbounded" minOccurs="0" >
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="telephone" type="xs:string" />
                    </xs:sequence>
                    <xs:attribute name="name" type="xs:string" use="required"/>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:schema>
Bằng cách này, chúng ta có thể tạo các loại của riêng mình một cách riêng biệt và sau đó thay thế chúng ở đâu đó trong thuộc tính loại. Điều này rất thuận tiện vì nó cho phép bạn sử dụng một loại ở những nơi khác nhau. Tôi xin nói thêm về việc nối mạch và kết thúc tại đây. Có hai cách để kết nối một mạch: vào một không gian cụ thể và chỉ cần kết nối.

Cách đầu tiên để kết nối mạch

Phương pháp đầu tiên giả định rằng mạch có một không gian mục tiêu cụ thể. Nó được chỉ định bằng cách sử dụng thuộc tính targetNamespace trên phần tử lược đồ. Sau đó, chỉ cần tạo CÙNG một không gian NÀY trong tệp XML và sau đó “tải” lược đồ vào đó là đủ:
<?xml version="1.0" encoding="UTF-8"?>
<nedvig:house xmlns:nedvig="https://www.nedvigimost.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://www.nedvigimost.com/ example_schema1.xsd">
    <address>ул. Есенина, дом №5</address>
    <owner name="Ivan">
        <telephone>+38-094-521-77-35</telephone>
    </owner>
</nedvig:house>
Điều quan trọng là phải hiểu hai dòng:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemeLocation="https://www.nedvigimost.com/ example_schema1.xsd"
Dòng đầu tiên - chỉ cần nhớ nó. Hãy coi nó như một đối tượng giúp tải sơ đồ đến nơi chúng cần đến. Dòng thứ hai là một bản tải xuống cụ thể. SchemaLocation chấp nhận danh sách các giá trị có dạng "value - value", cách nhau bằng dấu cách. Đối số đầu tiên là không gian tên, đối số này phải khớp với không gian tên đích trong lược đồ (giá trị targetNamespace). Đối số thứ hai là đường dẫn tương đối hoặc tuyệt đối tới lược đồ. Và vì đây là giá trị LIST, bạn có thể đặt một khoảng trắng sau lược đồ trong ví dụ, rồi nhập lại không gian đích và tên của lược đồ khác, v.v. bao nhiêu tùy thích. Quan trọng:Để lược đồ xác thực điều gì đó sau này, bạn cần khai báo khoảng trắng này và sử dụng nó với tiền tố. Hãy xem kỹ ví dụ cuối cùng:
<?xml version="1.0" encoding="UTF-8"?>
<nedvig:house xmlns:nedvig="https://www.nedvigimost.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://www.nedvigimost.com/ example_schema1.xsd">
    <address>ул. Есенина, дом №5</address>
    <owner name="Ivan">
        <telephone>+38-094-521-77-35</telephone>
    </owner>
</nedvig:house>
Chúng tôi đã tạo không gian mục tiêu này trên tiền tố nedvig và sau đó sử dụng nó. Do đó, các phần tử của chúng tôi bắt đầu được xác thực, vì chúng tôi bắt đầu sử dụng không gian nơi không gian lược đồ đích được tham chiếu.

Cách thứ hai để kết nối mạch

Cách thứ hai để kết nối một mạch ngụ ý rằng mạch đó không có không gian mục tiêu cụ thể. Sau đó, bạn có thể chỉ cần kết nối nó với tệp XML và nó sẽ xác thực nó. Điều này được thực hiện theo cách gần như giống nhau, chỉ có điều bạn không thể khai báo khoảng trắng trong tệp XML mà chỉ cần kết nối lược đồ.
<?xml version="1.0" encoding="UTF-8"?>
<house xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="example_schema1.xsd">
    <address>ул. Есенина, дом №5</address>
    <owner name="Ivan">
        <telephone>+38-094-521-77-35</telephone>
    </owner>
</house>
Như bạn có thể thấy, việc này được thực hiện bằng cách sử dụng noNamespaceSchemaLocation và chỉ định đường dẫn đến lược đồ. Ngay cả khi lược đồ không có không gian đích, tài liệu vẫn sẽ được xác thực. Và bước cuối cùng: chúng ta có thể nhập các sơ đồ khác vào sơ đồ, sau đó sử dụng các phần tử từ sơ đồ này sang sơ đồ khác. Vì vậy, chúng ta có thể sử dụng các phần tử trong một số mạch đã có ở các mạch khác. Ví dụ:

Lược đồ nơi khai báo loại chủ sở hữu:

<?xml version="1.0" encoding="UTF-8" ?>
<schema targetNamespace="bonus" xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
        <complexType name="owner">
            <all>
                <element name="telephone" type="string" />
            </all>
            <attribute name="name" type="string" />
        </complexType>
</schema>

Lược đồ thứ hai, sử dụng loại chủ sở hữu từ lược đồ đầu tiên:

<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="main" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:bonus="bonus" elementFormDefault="qualified">
    <import namespace="bonus" schemaLocation="xsd2.xsd" />
    <element name="house">
        <complexType>
            <all>
              <element name="address" type="string" />
                <element name="owner" type="bonus:owner" />
            </all>
        </complexType>
    </element>
</schema>
Sơ đồ thứ hai sử dụng cấu trúc sau:
<import namespace="bonus" schemaLocation="xsd2.xsd" />
Bằng cách sử dụng nó, chúng tôi đã nhập các loại và thành phần từ lược đồ này sang lược đồ khác vào không gian bổ sung. Vì vậy, chúng tôi có quyền truy cập vào loại phần thưởng:chủ sở hữu. Và trong dòng tiếp theo chúng tôi đã sử dụng nó:
<element name="owner" type="bonus:owner" />
Ngoài ra một chút chú ý đến dòng sau:
elementFormDefault="qualified"
Thuộc tính này được khai báo trong lược đồ và có nghĩa là trong các tệp XML, mỗi phần tử phải được khai báo bằng một tiền tố rõ ràng trước nó. Nếu không có thì chúng ta chỉ cần khai báo một phần tử bên ngoài bằng tiền tố và cũng cần đặt tiền tố cho tất cả các phần tử bên trong, chỉ rõ rằng chúng ta đang sử dụng chính xác các phần tử của sơ đồ này. Và trên thực tế, đây là một ví dụ về tệp XML được xác thực bởi một lược đồ đã nhập một lược đồ khác:
<?xml version="1.0" encoding="UTF-8"?>
<nedvig:house xmlns:nedvig="main" xmlns:bonus="bonus" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="main xsd.xsd">
    <nedvig:address>ул. Есенина, дом №5</nedvig:address>
    <nedvig:owner name="Ivan">
        <bonus:telephone>+38-094-521-77-35</bonus:telephone>
    </nedvig:owner>
</nedvig:house>
Trong dòng:
<bonus:telephone>+38-094-521-77-35</bonus:telephone>
Chúng ta cần khai báo rõ ràng không gian tên bổ sung, trỏ đến không gian đích của lược đồ đầu tiên, vì elementFormDefault đủ điều kiện (kiểm tra), vì vậy tất cả các phần tử phải chỉ rõ không gian của chúng.

Cuối bài viết

Bài viết tiếp theo sẽ là bài cuối cùng trong loạt bài này và sẽ nói về việc xử lý các tệp XML bằng Java. Chúng ta sẽ học cách thu thập thông tin theo nhiều cách khác nhau, v.v. Tôi hy vọng rằng bài viết này hữu ích và ngay cả khi có lỗi ở đâu đó, nó sẽ dạy cho bạn điều gì đó hữu ích và mới mẻ hoặc có thể chỉ cho bạn cơ hội hiểu rõ hơn về các tệp XML. Đối với những người muốn khám phá điều này chi tiết hơn, tôi quyết định tập hợp một bộ liên kết nhỏ:
  • XSD Simple Elements - bắt đầu từ bài viết này, hãy bắt đầu đọc và tiến về phía trước, tất cả thông tin về các sơ đồ đều được thu thập ở đó và được giải thích ít nhiều rõ ràng, chỉ bằng tiếng Anh. Bạn có thể sử dụng một dịch giả.

  • video trên không gian tên, việc lắng nghe quan điểm khác về điều gì đó luôn hữu ích nếu quan điểm đầu tiên không rõ ràng.

  • XML không gian tên là một ví dụ điển hình về việc sử dụng các không gian tên và khá toàn diện.

  • Khái niệm cơ bản về XML - Không gian tên - Một bài viết ngắn khác về không gian tên.

  • Khái niệm cơ bản về việc sử dụng lược đồ XML để xác định các phần tử cũng là một tài liệu tham khảo cực kỳ hữu ích về lược đồ, nhưng bạn cần đọc chậm và cẩn thận, đi sâu vào tài liệu.

Đó là điều chắc chắn, tôi hy vọng rằng nếu bạn muốn tìm hiểu điều gì đó sâu hơn từ điều này, các liên kết sẽ giúp ích cho bạn. Tôi đã tự mình xem qua tất cả các nguồn này, nghiên cứu tất cả tài liệu và nhìn chung, đây là những nguồn hữu ích nhất trong số các nguồn mà tôi đã xem xét, vì mỗi nguồn đều cải thiện sự hiểu biết về những gì tôi đã đọc ở nơi khác, hoặc hãy để tôi học điều gì đó mới, nhưng rất nhiều điều đã được thực hiện chỉ trong quá trình thực hành. Vì vậy, đối với những người thực sự muốn hiểu khá rõ về tất cả những điều này, lời khuyên của tôi là: nghiên cứu các không gian tên, sau đó làm thế nào để dễ dàng kết nối các lược đồ với các tệp XML và sau đó là cách viết cấu trúc tài liệu trong các lược đồ. Và quan trọng nhất là luyện tập. Cảm ơn tất cả các bạn đã quan tâm và chúc may mắn trong lập trình :) Bài trước: [Cuộc thi] Kiến thức cơ bản về XML dành cho lập trình viên Java - Phần 1/3 Bài tiếp theo: [Cuộc thi] Kiến thức cơ bản về XML dành cho lập trình viên Java - Phần 3.1/3 - SAX
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION